c语言中*p++和(*p)++有什么区别?

#include <stdio.h>
void main()
{
int x=3;
int *p,*q;
p=&x,q=&x;
printf("%d\n",*p++);
printf("%d\n",(*q)++);
printf("%d\n",x);
}
输出结果为:3,3,4;
我看书中解释:*p++:是先取出*p的值,再使p加1
(*p)++:是使*p的值加1.
所以我觉得是:3,4,4
求各位能帮我解释下,谢谢了!

第1个回答  2020-03-13
*p表示p代表相应数据类型在存储单元中存储的首地址,而这个存储单元存储的是相应类型数据的数值,
**p表示p也表示地址,简单的说,这个地址对应的存储单元存储的数也是一个地址,而不是数值,而这个被存储的地址对应的存储单元存储的数据才是真正的相应类型的数值!
第2个回答  2019-07-09
区别大了。
*p只是一个指针,
**p是一个指向指针的指针
例如int
*p;
那么p就是指向int类型变量的一个指针。(即数组)
如果int**p;
那么p就是指向int*类型指针的一个指针。(即指向一维数组的指针,即二维数组)
第3个回答  2013-05-20
printf("%d\n",(*q)++); 先取出 (*q) = 3; 所以输出3 等取完值后 *p再加1 才是你说的 4
第4个回答  2019-01-14
while(p)
等价于while(p
!=0)
检查的是p值是不是0,或者是不是空指针,如果是,则跳出循环,不再继续循环体
而while(*p)
相当于while(
*p
!=
0)
检查的是p所指向的地址中的数据是否为0,但前提是p不能为null
第5个回答  2018-12-30
由于后置++在执行完后返回运算前的值,所以(*p)++返回的值是3.
但是此时x已经被修改为了4,所以后边的输出就是4了。
相似回答