C语言:若有定义 int *p, 则表达式 p++ 的值就是 p 所指向的变量的地址值加1?

请判断正误并说明理由
int a[]={1,2,3}

int *p=&a[1]

printf("%d",*(p++))

printf("%d",*(p--))

//为什么两次输出结果一样

若有定义 int *p, 则表达式 p++ 的值就是 p 所指向的变量的地址值加1?---这句话是错的。P++后的结果是地址加上一个整数,该整数指针指向变量类型在内存中占用的字节长度。
//为什么两次输出结果一样--因为语句中是对++或--之前的值进行操作。改为++p,--p就会不一样了。

回答完毕。
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-07-05
错误,要看变量占用的地址空间,这里是加sizeof(int)

printf("%d",*(p++));
printf("%d",*(p--));
两次输出结果怎么可能一样呢,
printf("%d",*(p++)); 输出2
printf("%d",*(p--)); 输出3
第2个回答  2014-07-05

经测试输出结果不一样。你的问题就不对。

另外p++是先输出再加1,p--也是先输出再减1.

第3个回答  2014-07-05
你把++和--写p的前面
*(++p)
*(--p)
你这玩意和指针一点关系也没.....你前面学的不好啊~
自增和自减最好是写成单独的语句
你的那个p没用,用a就可以表示
为啥指针要区别类型?就是因为这p++这里是加1,但逻辑上有加sizeof(int)个数.如果double和int都用一个指针,那鬼知道这p++在逻辑上是加sizeof(int)个还是sizeof(double)个?
第4个回答  2014-07-05
不可能一样。printf("%d",*(p++));输出2,而printf("%d",*(p--));输出3。因为p=&a[1]=2,所以printf("%d",*(p++));输出*p=2;那个++在输出后执行,使p指向a[2]=3;接着printf("%d",*(p--))输出*p(注意这时p+1了,指向了3)=3;完成后才对p时行--操作又使它指向2。
相似回答