int arr[3] = {10, 20, 30};
int *parr = arr;
1. *parr 、 *arr 分别代表什么
指针parr指向数组arr[3]的首元素地址,arr数组名单独使用表示数组首元素地址,即arr==>&arr[0];
*parr和*arr是对首元素地址的解引用,代表访问arr[0]的空间,结果为10。
2. *(parr+1) 、 *(arr+1)、*parr+1、*arr+1 分别代表什么
(parr+1) 和(arr+1)都代表arr[1]的首地址;*(parr+1) 、 *(arr+1)都代表访问arr[1]的空间。
*parr==>解引用parr,即访问arr[0]的空间,*parr+1代表将存储在arr[0]空间中的值+1,结果为11 ;*arr+1同上。
3.parr++、 ++parr, arr++ ,++arr 分别代表什么
指针parr指向arr[0]
后置++,先返回parr的值,为arr[0]的首地址,此时parr指向arr[1];
前置++,返回parr+1的值,为arr[1]的首地址,此时parr指向arr[1];
arr作为函数名单独使用,表示数组首元素地址,是常量,无法自增运算。
4.*parr++、*++parr 、*arr++、*++arr 分别代表什么
* 和++ 优先级一致,但从右往左结合
parr先与++结合自增,后置++,先返回parr的值,为arr[0]的首地址;此时parr向后偏移1后指向arr[1];再与*结合,即对parr==>arr[0]的首地址解引用,代表访问arr[0]所在空间,结果为10;
前置++,返回parr+1的值,为arr[1]的首地址,此时parr指向arr[1];再与*结合,即对parr+1==>arr[1]的首地址解引用,代表访问arr[1]所在空间,结果为20;
arr作为函数名单独使用,表示数组首元素地址,是常量,无法自增运算。
5.*(parr++), *(arr++) 分别代表什么
先算()内的parr++,返回parr的值,为arr[0]的首地址;再与*结合,即对parr==>arr[0]的首地址解引用,代表访问arr[0]所在空间,结果为10;
先算()内的arr++,arr作为函数名单独使用,表示数组首元素地址,是常量,无法自增运算。
6.(*parr)++, (*arr)++
先算()内的*parr,表示对parr即arr[0]的首地址解引用,代表访问arr[0]所在空间,再算++,即将arr[0]所在空间的值10自增,arr[0]空间所存储的值变为11;
由于是后置++,所以会先返回arr[0]中的数据,再对arr[0]中的数据自增。parr指向没有改变,依然指向arr[0]
arr=parr,同上。