二维(及高维)数组指针意义和使用

本文探讨了二维数组在函数参数传递、元素表示及指针操作中的不同形式。通过示例代码展示了如何正确理解和使用二维数组指针,强调了数组指针递增时地址变化的规律,并指出高维数组指针的本质是多层指针,各层指针增加的字节数不同。
摘要由CSDN通过智能技术生成

以前以为数组很简单,现在发现原来是自己很肤浅,昨天写了一段代码总是越界一晚上也没搞清楚是怎么回事,现在才发现是在对二维数组的指针引用上出错了,下面是目前发现几种形式:

1. 首先静态二维数组如何作为参数传入函数形式:

void myfunc(char sToken[][100])

void myfunc(char (*sToken)[100])
是等价的!

2.静态二维数组元素a[i][j]可表示成*(a[i]+j)或*(*(a+i)+j), 它们都与a[i][j]等价, 或者还可写成(*(a+i))[j]。

此时注意(*a+i)[j]和(*(a+i)[j])与前面表示的不同之处(数组其实就是指针,上次在csdn上写的那个).

3.下面是一段测试代码

void main(){
 double Array[3][3] = { {3,-0.1,-0.2},{0.1,7,-0.3},{0.3,-0.2,10}};
 //Decompose(Array, 3);
 
 double (*ptr)[3] = Array;
 //ptr是(*)[]类型的指针,它存储的是数组第一维(即每一行)的首地址,它的每一次递增增加的地址数都是3个double类型的字节数
 ptr = &Array[1];
 //ptr中的内容其实是一个[]类型的指针,即数组第二维(即特定某一行)的首地址,它的每一次递增增加的是1个double类型的字节数
 //同时注意[]的优先级高于*(解引用dereference)的优先级
 cout << (*(ptr+1)[1]) << endl;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值