C语言指针

[复制链接]
查看11 | 回复4 | 2010-10-4 23:28:28 | 显示全部楼层 |阅读模式
有这样两段程序,是分析结果:
#include
main()
{
int *p,n=7;
p=&n;
*(p++);
printf("*p=%d,p=%d,n=%d\n",*p,p,n);
}
这段输出的结果为:*p=-28,p=-40(忽略),n=7,为什么*p的结果为-28?
#include
main()
{
int *p,n=7;
p=&n;
(*p)++;
printf("*p=%d,p=%d,n=%d\n",*p,p,n);
}
这段程序的输出结果:*p=8,p=-42(忽略),n=8
我觉得,*p的值应与其指向的变量(常量)值相同,所以为什么第一例中*p=-28?
谢谢!
是不是因为第一例中p所指向的地址变了,超出定义相当于越界,所以出现个莫名其妙的数?

回复

使用道具 举报

千问 | 2010-10-4 23:28:28 | 显示全部楼层
第一个程序。看这一句*(p++)。p本身是指针,你对指针进行加1操作,它会指向下一个数值,具体加几个字节,需要看指针的类型,比如p是int型指针,那么它会加4个字节,如果是char型指针就会加1个字节。你把指针加了,那么p的值(是一个地址值)以及*p的值(地址所指向的数值)都是未知的。你的理解是正确的。需要指出的是*号不要结果也是一样,这样写p++,结果也一样。第二个程序(*p)++,你是讲p所指向的值进行了加1的操作,那么*p的值自然是8,而p依然是一个指针,它的值是地址,出现任何数字都不奇怪。p的值是地址,*p的值是p中存放地址所指向的值。
回复

使用道具 举报

千问 | 2010-10-4 23:28:28 | 显示全部楼层
*(p++);意思是p 指针向前移动一个位置的地址在解引用 p不在指向n 了 所以 会出现莫名其妙的数
回复

使用道具 举报

千问 | 2010-10-4 23:28:28 | 显示全部楼层
(*p++)已经让p加了1,所以他指向不是n,而是n的下一元素,即&n再往后移动2个字节,而这个地址里面的数据是随机的。
回复

使用道具 举报

千问 | 2010-10-4 23:28:28 | 显示全部楼层
你的补充很正确
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行