如何传递三维数组乃至n维数组

2 篇文章 0 订阅
1 篇文章 0 订阅

在此之前,提一下二维数组的常用传递方法:

1.传递时提及第二维度:arr[][size2];

void func(int arr[][6]){
    arr[3][4]=34;
}
int main(){
    int arr[5][6];
    func(arr);
}

2.“假装”成一维数组

void func(int* arr, int s1, int s2){
    arr(s2*3 + 4)=34; //相当于arr[3][4]=34,
}
int main(){
    int arr[5][6];
    func( (int*)arr, 5, 6);
}

为什么要使用第二个维度,而不是第一个呢?
想一下,由两个维度摊开成一个面,从上到下从左到右数,第4行(行标是3)第5列(列标是4)是第几个元素怎么算?
应该是前3行每行6个元素,加上第四行的5个元素,即3*6+5=23(作为一位数组的下标是22)。
因此在这里,只需知道第二维度,而第一维度who care?
这也是方法一不需要第一维度的原因,两者其实是相同的原理。

三维数组:

与前面一样,懂了原理就知道,需要知晓后两个维度(n维数组需提供后面n-1个维度)
1. 按arr[][size2][size3]传递

2.还是“假装”成一维数组

void func(int* arr, int s1, int s2, int s3){
    arr(s2*s3*3 + s3*4 + 5)=345; //相当于arr[3][4][5]=345,
}
int main(){
    int arr[5][6][7];
    func( (int*)arr, 5, 6, 7);
}

行和列形成一个面,多层面形成三维图形,维度顺序是层、行、列
前3层共有多少个元素,当然是6*7*3个了,所以需知晓第二、第三维度。

3.先在全局作用域设置一个类型别名

typedef int mytype[5][6][7];

然后就可以将mytype当成int[5][6][7]进行传递

void func(mytype arr){
    arr[3][4][5]=345;
}
void main(){
    mytype arr; //相当于int arr[5][6][7]
    func(arr);
}

这,好像就是看起来简约了一点,但其实,emmm,作用确实不大,只是便于封装。。。

只要理解了原理,妈妈再也不用担心我传数组啦!不管几维数组都能传。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值