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已经被重新赋值,在其后主函数程序中可以直接调用。
文章评论