#include<stdio.h>
void main()
{
int a=2,*p=&a,*q=&a; (*p在取值?&a代表的是a变量的地址,*p代表p变量所对应的值<目前还没>,这能等吗?)
printf("%d %d\n",*p++,*(q++));q++已经被括起来了啊,为什么取值还是只去变量p对应的值?)
p=&a;q=&a; (存值?)
printf("%d %d\n",*p,(*q)++);
}
2 2 这里是运算结果。
3 2
1.int *p=&a 这句的意思是定义一个指向a的指针变量。此时的* 是【类型说明符】表明其后的变量是指针变量,而不是运算时的【针变量所指的变量】。只要a在*p之前已经定义完成,那么a的地址就已经确定,所以int a=2,*p=&a;当然正确。
2.printf("%d",*(q++)代表先输出q所指向的a的值,然后q再加1,注意是q加1,而不是*q即a加1,所以*p的值还是2.然后再输出*p,再p加上1. 此时a的值还是2,只是p,q所指向的变量已不是a了。
3.p=&a,就是把a的地址赋给指针变量p
4.printf从右往左运算,首先执行(*q)++,即先输出a,然后a加1,(注意此时括起来的是*q),所以第二个为2.。然后输出*p,p指向a,a此时为3,所以第一个输出为3
指针是按你下面一种形式为标准定义的。地址和值挂钩了。
上面一种方法是地址,地址改变不影响值。所以操作后对于你printf("%d %d\n",*p,(*q)++);没有值的影响