标题:学习C时,遇到一个不能理解的问题,求大神指导,不胜感激
只看楼主
为瞬间停留
Rank: 1
等 级:新手上路
威 望:1
帖 子:14
专家分:4
注 册:2016-6-13
结帖率:0
已结贴  问题点数:20 回复次数:10 
学习C时,遇到一个不能理解的问题,求大神指导,不胜感激

代码如下:
#include <stdio.h>
int main()
{
    int* p;
    int i;
    printf("请输入5个数:");
    for(i=0;i<5;i++)
    {
        scanf("%d",p+i);
    }
        printf("这5个数是:");
    for(i=0;i<5;i++)
    {
        printf("%d ",*(p+i));
    }
    return 0;
}


运行结果:
    请输入5个数:5 6 7 8 9
    这5个数是:2293556 6 7 8 9
    Process returned 0 (0x0)   execution time : 8.287 s
    Press any key to continue.


为什么输出的第一个感觉是内存地址?而我换成数组就对了,求指导。
代码:
#include <stdio.h>
int main()
{
    int a[5];
    int i;
    printf("请输入5个数:");
    for(i=0;i<5;i++)
    {
        scanf("%d",&a[i]);
    }
        printf("这5个数是:");
    for(i=0;i<5;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}

结果:
    请输入5个数:5 6 7 8 9
    这5个数是:5 6 7 8 9
    Process returned 0 (0x0)   execution time : 18.165 s
    Press any key to continue.









搜索更多相关主题的帖子: execution continue 不胜感激 include return 
2016-06-13 11:18
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
得分:4 
p是个野指针,你把赋值前后的值打印看看?
2016-06-13 11:54
apiqqz
Rank: 2
等 级:论坛游民
威 望:2
帖 子:56
专家分:25
注 册:2011-9-2
得分:4 
P指针没有明确的赋予一个安全的地址,可能值在运行中被覆盖了,这样写程序非常的不安全
2016-06-13 12:51
hykj9495
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:796
专家分:1441
注 册:2016-6-6
得分:4 
分辨调试了俩种指针奔溃,数组可行

慢慢调试
2016-06-13 18:10
hykj9495
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:796
专家分:1441
注 册:2016-6-6
得分:0 
数组的特点所以成功了。数组自带首地址。
指针(动作)按地址访问实际内容。
用纯指针(动作)需要变量保存地址。


scanf("%d",p+i);//P+i是指针变量(指针的名字)不是指针(地址,名词)
指针按作用不同可分为动词和名词
可恶的人类方言

慢慢调试
2016-06-13 18:31
寂兮廖兮
Rank: 2
等 级:论坛游民
帖 子:22
专家分:27
注 册:2016-6-13
得分:4 
问个问题啊,这边的return 0 是做什么用的?
2016-06-13 18:51
为瞬间停留
Rank: 1
等 级:新手上路
威 望:1
帖 子:14
专家分:4
注 册:2016-6-13
得分:0 
回复 5楼 hykj9495
刚开始是有警告,我回来用自己电脑试了一下,会崩溃,估计指针还是要初始化吧
2016-06-13 19:03
为瞬间停留
Rank: 1
等 级:新手上路
威 望:1
帖 子:14
专家分:4
注 册:2016-6-13
得分:0 
回复 6楼 寂兮廖兮
这个main返回值是int ,不然会有警告
2016-06-13 19:03
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:4 
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int* p;
    int i;
    p= (int *)malloc( sizeof(int)*5 );//给指针p开辟个5个整型大小的空间。这样指针就不会瞎指地方了,同时定下它的大小,以防数据溢出。
    printf("请输入5个数:");
    for(i=0;i<5;i++)
    {
        scanf("%d",p+i);
    }
        printf("这5个数是:");
    for(i=0;i<5;i++)
    {
        printf("%d ",*(p+i));
    }
    return 0;
}
2016-06-13 22:04
平常心q
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:120
专家分:550
注 册:2016-3-31
得分:4 
        在 int *p后加这两行代码即可按你要求输出了
       int a[5];
    p = a;
2016-06-14 12:01



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




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

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