int arr[3] = {10,20,30};
int *parr = arr;
1. *parr、 *arr 分别代表什么
*(parr+0) == *(arr+0) == 10 ==》取首素值
=========================================================================
2. *(parr+1)、 *(arr+1)、 *parr+1、 *arr+1 分别代表什么
*(parr+1) == *(arr+1) == 20 ==》向后偏移sizeof(int)个字节取第二个元素的值
*parr+1 == *arr+1 == *(parr+0)+1 == *(arr+0)+1 == 10 + 1 == 11 ==》取首元素的值+1
=========================================================================
3. parr++、 ++parr、 arr++、 ++arr 分别代表什么
parr++ ==》 先返回parr[0]的地址,再自增1,此时偏移到parr[1]的地址...
++parr ==》 先自增1,此时偏移到parr[1]的地址,返回的是parr[1]的地址...
arr++、 ++arr ==》数组名是一个指针常量,不能修改!!!!!!!!!!
=========================================================================
4. *parr++、 *++parr、 *arr++、 *++arr 分别代表i什么
++ -- * 优先级相同,自右向左结合
*(parr++) ==》 先计算parr++再计算* ==》parr++是后置++,先返回parr[0]的地址再自增1,偏移到parr[1]的地址 ==》 先返回了parr[0]的地址和*结合,解引用parr[0]的地址得到parr[0]中的值 ==》 但是此时parr是parr[1]的地址
*(++parr) ==》 先计算++parr再计算* ==》 ++parr是前置++,先自增1,此时偏移到了parr[1]的地址,返回parr[1]的地址 ==》 parr[1]的地址和*结合,解引用parr[1]的地址得到parr[1]中的值 ==》 此时parr中也是parr[1]的地址
*(arr++) == *(++arr) ==》 数组名是一个指针常量,不能修改!!!!!!!!!!!!!
=========================================================================
5. *(parr++)、 *(arr++) 分别代表什么
*(parr++) ==》 地址自增1,向后偏移sizeof(int)个字节后,再取值
*(arr++) ==》 数组名是一个指针常量,不能修改!!!!!!!!!!!!!
=======================================================================
6. (*parr)++ 、(*arr)++ 分别代表什么
(*parr)++ == (*arr)++ ==》 先取首元素的值,因为是后置++,先返回值,此时返回的是首元素的值 ==》再在首元素值的基础上自增1 ==》 parr仍然指向arr[0]
标签:20241016,++,arr,int,地址,偏移,parr From: https://blog.csdn.net/qq_64376986/article/details/142989586