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

用一个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;

多维数组情况以此类推

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值