面试题:二级指针
#include <iostream>
int main()
{
int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };
int(*p)[4] = a;
//std::cout << *(p + 1) << std::endl;
std::cout << (sizeof(*(p+1))) << std::endl;
std::cout << (**(p + 1)) << std::endl;
std::cout << (**p + 1) << std::endl;
return 0;
}
结果:
16
4
1
详细分析——int (*p)[4];
这种定义方式经常与二维数组联用
解释定义
int (*p)[4]
;表示p是一个指针变量,指向一个存放4个整型元素的一维数组,且p+1(或p-1)是向前(或向后)移动数组长度个字节的大小。其中,指针变量指向一维数组的指针变量,指向二维数组中的某一行。
而第一种方式的p+1(或p-1)是向前(或向后)移动int个字节的大小。
该方式在与二维数组的联用
设有如下二维数组:
int a[3][4] = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
int (*p)[4] = a;
利用指向由4(二维数组列数)个元素组成的一维数组的指针变量引用二维数组
当执行 p = a 时,内存存储情况变为:
当 p ++ 时:
即 此时p[0][0]
的值等于a[1][0]
的值为5.
注:(*(a + i) + j)等价于 *(a[i] + j) 等价于a[i][j]*。
例如:(*(a + 1) + 2) = *(a[1] + 2) = a[1][2]
若:int (*p)[4];
p = a;
则:(*(p + 1) + 2) = *(p[1] + 2) = p[1][2]
参考:
https://blog.csdn.net/qq_41519304/article/details/105907427
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)