标题:动态数组定义问题[online]
只看楼主
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
结帖率:97.5%
已结贴  问题点数:20 回复次数:7 
动态数组定义问题[online]
    void check(int *p,int n);
    int *p1,n;
    printf("输入N个学生,打印出不及格学生的成绩\n");
    while(scanf("%d",&n)!=EOF)
    {
        p1=(int *)malloc(n * sizeof(int));
        for(int i=0;i<n;i++)
        {
            scanf("%d",p1++);                -----------这里用p1+i的方式输入结果是正确的(以4个字节存储)

            printf("%d ",p1++);              -----------但是用p1++的方式输入结果是错误,(以8个字节随机存储)
我想问下是什么原因导致这样的结果,原理是怎么样的。
如果是数组(a[i],*p=a)的话就可以以a+i,p++的方式输入,用*(a+i)和*(p++)输出。
搜索更多相关主题的帖子: online 动态 
2017-03-13 19:19
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:10 
printf("%d ",*p1);     
2017-03-13 19:21
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
得分:0 
回复 2楼 ehszt
*p1结果也是不正确的,必须要用数组的方式输入输出才正确。我看了p1++这种是8个字节存储。p+i这种是4个字节存储
2017-03-13 19:26
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:0 
回复 3楼 Emotiona
刚试了,没问题呀
#include <stdio.h>
#include <stdlib.h>
main()
{
    int *p;
    p=(int *)malloc(5*sizeof(int));
    for(int i=0;i<5;i++)
    {
        scanf("%d",p++);
    }
    for(int i=0;i<5;i++)
    {
        printf("%d ",*--p);
    }
}
2017-03-13 19:32
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
得分:0 
回复 4楼 ehszt
你帮我看看 我打印出来错误
#include<stdio.h>
#include<stdlib.h>
int main()
{
    void check(int *p,int n);
    int *p1,n;
    printf("输入N个学生,打印出不及格学生的成绩\n");
    while(scanf("%d",&n)!=EOF)
    {
        p1=(int *)malloc(n * sizeof(int));
        for(int i=0;i<n;i++)
        {
            scanf("%d",p1++);

            printf("%d ",*p1++);
            //check(p1,n);
        }
    }
    return 0;
}
/*void check(int *p,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        //if(*(p++)<60)
        //printf("%d ",*(p++));
    }
}
*/
2017-03-13 19:41
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:0 
输入输出放在两个循环里,注意指针输入完位置变了。
建议用数组,因为数组名的位置是不变的。
2017-03-13 19:47
alice_usnet
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:370
专家分:2020
注 册:2016-3-7
得分:10 
你要打印刚输入的内容吗?
printf("%d ",*(p1 - 1));

未佩好剑,转身便已是江湖
2017-03-13 19:47
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
得分:0 
回复 7楼 alice_usnet
谢谢!明白了地址加了4个字节
2017-03-13 19:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-475033-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.954402 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved