根本就不是一样的
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char** argv )
{
int a[] = {1, 3, 5, 7, 9};
int *p = a;
int *q = a;
printf("%d\n", *p++);//输出1
printf("%d\n", *p);//输出3
printf("%d\n", *(q+1));//输出3
printf("%d\n", *q);//输出1
return 0;
}
开始p和q都指向数组a的第一个元素a[0]
*p++就是取p当前指向内存空间的值,然后指针向后移动一个数据单元
相当于如下代码:
*p;//先取指向空间的值,即a[0]的值1
p++;//指针向后移动一个数据单元,此时p指向数组a的第二个元素a[1]
所以*p++的值为1,p指向a[1]
*(q+1)就是先把指针向后移动一个数据单元a[1],然后取a[1]的值
这个时候q的值并没有变,还是指向一个元素a[0],但是*(q+1)的值却是a[1]的值
*(q+1)的值为3,q还是指向a[0]
所以*p++和*(p+1)根本就不是一样的,也不相等
温馨提示:答案为网友推荐,仅供参考