C++ 理解二维数组的指针

来源:互联网 发布:php开源三级分销商城 编辑:程序博客网 时间:2024/05/16 15:28

用一个main函数来描述这个问题吧

今天终于弄明白**p, (*p)[4], *p[4]的区别

int main(){

int arr[4][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
//  理解二维数组的指针 


// 首先,二维数组的名称 arr 是一个指针, 它相当于这样的一个指针:(*p)[4],它是一个"指针的指针"
// 从第一层面来讲,它是一个包含4个元素数组的指针,
int (*p)[4] = arr;
// p等于这个数组的首元素的地址
cout << arr << endl;
// *p为首元素的值(*p = p[0])
cout << *arr << endl;
// 从第二层面来讲,这个4元数组的每个值都是一个数组的指针,指向数组首元素,也就是每行的第一个元素 
cout << **arr << endl;// 输出1,即第,0行的第0个元素值
// 接下来重点在这里,这与 * 和 [] 的优先级有关系,[] 的优先级大于 *, 
// 所以arr[1]为第1行首元素的地址,*arr[1]为第一行首元素的值,即5 
cout << *arr[1] << endl; // 输出5 
// *arr的值,根据上面解释,为第0行的指针,
// 所以(*arr)[1]表示第0行的第1个元素,即2 
cout << (*arr)[1] << endl;// 输出2 

return 0;

多维数组情况以此类推

1 0
原创粉丝点击