*(q++)是如何进行运算的?

来源:百度知道 编辑:UC知道 时间:2024/06/28 21:36:58
{
int a=10,*q=&a; /*假设变量a的首地址是1000。*/
printf("%d",*(q++));
}

这段程序中的*(q++)是如何进行运算的?
我的想法:既然带了括号,那就应该先算括号里面的,也就是指针变量q++,那此时这个表达式就变成了*(1002),对吧?(因为是int型的,加2是在TC环境下的,加4是在VC环境下的,对吧?)
那再继续运算,该*1002了,那不就是区首地址为1002的那个变量里面的内容么。

我这么想,对么?

本人初学指针,问题低级,请各位C语言高手不吝赐教!说的详细一点,大众化一点,不要从别的地方COPY。
谢谢
那(*pa)+++*pb等价于什么?
曾怡讲的是等价于((*pa)++)+*pb
为什么?
是如何分析出来的?

q++ 是“后加加”,退出(循环)增量运算q 值才变化。
也就是
printf("%d",*(q++)); 打的是 *q.
再打 printf("%d",*(q)); 打的是 *(q++)

void main()
{
int a[3]={10,11,12}, *q=&a[0];
printf("%d ", *(q++)); // 打 10
printf("%d ", *(q)); // 打 11
}

你的想法没什么不对。
确实是打印出地址1000之后的一个字节里的内容
这里很可能打印出一些乱码。

是么,试一下呀,看看是什么,虽然你加括号了,可是对前后++确没有作用的,后缀就是要到语句执行完了才会自增,前置就是在语句执行前自增.和括号没关系了.

a++ 是先加后运算
++a 是先运算后加

所以这里是先(*pa)++
再+*pb