| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 614 人关注过本帖
标题:请教诸位一个关于指针的疑惑
只看楼主 加入收藏
sergio
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-10-22
收藏
 问题点数:0 回复次数:5 
请教诸位一个关于指针的疑惑
void main()
{
    int x;
    int* p1;
    x=5;
    printf("x的值为: %d,x的地址为: %ld\n",x,&x);
    p1=&x;
    printf("指针p1的值为: %ld\n",p1);
    printf("指针p1+1的值为: %ld,%d\n",p1+1,sizeof(int));
    printf("指针p1的值指向的内容为: %ld\n",*p1);
    printf("指针p1+1的值指向的内容为: %ld\n",*(p1+1));
}

代码中最后输出的*(p1+1)的值为什么不是6,是不是p1+1指向的内存地址中预存的数,如果是为什么每次都是一样的,而不是随机生成?感谢解答!
搜索更多相关主题的帖子: 指针 
2008-11-08 13:55
还是做宅男好
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2008-8-21
收藏
得分:0 
printf("指针p1+1的值指向的内容为: %ld\n",*p1+1);
这样就是6了
*p1指向的是X,所以*p1+1就是X+1=6。
*(p1+1)括号中p1存储的是X在内存中的地址,所以相当于*(x在内存中的地址+1),自然得不出6了。

[[it] 本帖最后由 还是做宅男好 于 2008-11-8 14:21 编辑 [/it]]
2008-11-08 14:10
eager
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2007-10-17
收藏
得分:0 
*(p1+1)不可能是6,*p1+1才是6。*(p1+1)理论上应该是一个随机值。有可能是与程序或者编译器有关,使得紧接x存放某个固定值。你可以用turbo C、VC、gcc分别试一下。
2008-11-08 14:17
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
p1指向了X的内存地址,p1+1则指向该地址的下一个地址,该项地址的int值在debug下是0xCCCCCCCC,release下该值为0x00000001.
2008-11-08 14:24
sergio
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-10-22
收藏
得分:0 
谢谢诸位答复,我也觉得应该像eager认为的,是随机值,可是编译,出来每次都一样,所以有点疑惑。
2008-11-08 14:40
kylin520
Rank: 1
来 自:深圳
等 级:新手上路
帖 子:19
专家分:0
注 册:2008-11-7
收藏
得分:0 
我也明白了..多谢大家!!!
2008-11-08 15:59
快速回复:请教诸位一个关于指针的疑惑
数据加载中...
 
   



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

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