2 y516599087 y516599087 于 2013.10.15 17:22 提问

c语言中指针p 和 p++的问题

int main()
{
int * ptr=(int*)malloc(10);//arr;
printf("%d\n",ptr);
printf("%d\n",ptr++);
}
为什么输出的值是一样的呢?

3个回答

WY247688206
WY247688206   2013.10.18 07:39
已采纳

ptr就是当前指针,
ptr++,在引用是,取得是当前指针的值,使用之后,该值自加,这是后自加的方式。
同理(*ptr)++ 值为当前指针所指的值,运算过后,指针指向下一个

lym753024200
lym753024200   2013.10.15 19:18

ptr是一个指向数组的首元素的指针,这个数组大小为10,元素类型为int
printf("%d\n",ptr);意思是以十进制格式输出这个数组的首元素地址,输出完毕后ptr的值不变
printf("%d\n",ptr++);意思是以十进制格式输出这个数组的首元素地址,输出完毕后ptr的值要加1
所以输出结果不变
记住:ptr++和++ptr不同,前者++位于变量后,称为后++,使用时候是先引用变量后增值变量;后者++位于变量前,称为前++,使用时候是先增值变量后引用变量。

DoctorCZM
DoctorCZM   2013.12.23 11:14

这个问题有两个关键点:
1.变量与表达式
这里ptr为变量,ptr++为表达式;
2.再来说ptr++
执行ptr++时,ptr++这个表达式先引用ptr变量的值(即变量ptr原先的值),然后ptr进行加1操作。

楼主如果将上述代码改成:
ptr++;
printf("%d\n",ptr);

希望我的解答对您有帮助,问题的关键还是要认清变量与表达式,然后就是++不同形式的情况。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!