多维数组做形参

1、声明N维数组的指针时,除了第一维大小可以留空外,其它都需要填写数值。例如
int fun(int arr[][2][5][3],int rows); 或者
int fun(int (*arr)[2][5][3],int rows); 
如果不需要用到第一维大小,rows可以不要,但如果要知道整个数组大小,就必须把rows作为参数传给函数,或者使用全局变量记录第一维大小。
当然,也可以不传递第一维大小,而传递整个数组大小,这样同样可以算出第一维大小。总之,第一维大小必须是可知的。而不能通过被调用程序自己去获得。
编译器实际处理多维数组是把一维数组分段处理的,也就是说实际上并不存在多维数组,多维数组仅仅是个逻辑概念,所以行下标改变时,编译器必须知道有多少列,以计算偏移地址
例如:

void show(int *node,int num)
{
int i;     
for(i=0;i<num;i++)
       printf("]",node[i]);
}

int main(void)
{
      int arr[3][2] = { {1, 2}, {3, 4},{5, 6} };
    
      show(arr,6); //  也可写成   show(*arr,6);
      system("pause");
      return 0;
}

输出1 2 3 4 5 6

说明:
1)这个函数传递的就是整个数组元素多少,而不是第一维大小;
2)主函数里面使用arr做实参,由于数组名表示首元素的地址,所以,arr=&arr[0],因此它是一个指向二维int型数组的指针,与子函数类型不符合,函数运行时,其实是进行了类型转换,将其转换为int型指针。
如果使用show(*arr,6);就不需要进行类型转换。
3)区别变长数组做形参
      void show(int m,int n,int tag[m][n]);
此时,不能写成
      void show( int tag[m][n],int m,int n);
参数必须放在数组前面。
更多维则
      void show3(int m,int n,int tag[m][n][5]);
或者
      void show3(int m,int n,int t,int tag[m][n][t]);


2、不能用多重指针来表示多维数组;例如
上述子函数不能写成
void show(int **node,int num)
{
      ...
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值