C语言:子函数中的可变长度的多维数组在主函数中的调用

本文详细解释了C语言中指针、多维数组的概念,特别是如何处理二维数组和长度可变数组,以及在子函数中使用这些数组的技巧。重点介绍了如何在子函数中使用void型函数返回并操作二维数组,以实现类似Matlab的reshap功能。

 1、指针和多维数组

(1)int Turbo[188][3] 为在子函数中定义的一个int型的二维数组,Turbo表示该数组的首地址,Turbo的首个元素是一个内含3个int型数据的数组,所以其首地址是这个内含3个int值的数组的地址;Turbo[0]则表示内含1个int型数据的地址。

(2)给指针或者地址加1,Turbo+1 表示增加了3个int大小,Turbo[0]+1 表示增加了1个int大小。

(3)*(Turbo[0]) 表示储存在Turbo[0][0]上的一个int类型的数值,*Turbo表示Turbo[0]的值,即&Turbo[0][0],表示的是一个int类型值的地址。因此,**Turbo = *( &Turbo[0][0] ),即可以将Turbo理解为地址的地址,必须解引用两次才能得到原始的int类型的数值。

2、指向多维数组的指针

声明一个指针变量p,指向二维数组Turbo:

int  (*p)[3];   // p指向一个内含3个int类型值的数组

[ ]的优先级高于*;

【注意】int  *p [3];  // 3个指向int类型的指针

3、长度可变的二维数组在主程序中的调用

先在主函数中对长度可变的数组进行定义和初始化:

如图所示,数组pai为1*K_in维的int型一维数组,p为M*P维的int型二维数组,参数P=8,为一个已知的固定参数,参数K_in和M可根据实际需求进行赋值。

       那么此时将pai和p作为一个C程序的子函数的输入,令此子函数的功能实现matlab中的reshap函数的功能,子函数的定义如下:

需要注意的是:在子函数中对二维数组进行定义和操作时,二维数组的一个维度必须是已知的,如上述定义的子函数中的二位数组y的列数为8是已知的,k_in为输入的一维数组x的长度,那么M就表示为y的行数,此函数的功能为:将1*k_in维的数组x排列成M*P维的二维数组。

这个子函数在主函数的调用方式如下:

我们后续的程序中要用到子函数中的二维数组p,但一般有返回值的函数只能返回一个数值,并不能返回一个数组,因此将子函数为void型的函数,那么在被主函数调用后,p已经被重新赋值,在其后主函数程序中可以直接调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值