[C语言]二维数组传参的格式(详细+总结) 您所在的位置:网站首页 二维数组的维数是什么意思 [C语言]二维数组传参的格式(详细+总结)

[C语言]二维数组传参的格式(详细+总结)

2024-03-16 04:59| 来源: 网络整理| 查看: 265

希望能帮助到你,我将无比快乐。 你的点赞✌️,是我前进的动力。

初遇二维数组作函数参数,宛如自己化身为了大头儿子。很头大。

不禁大声呐喊:该怎么声明定义,该怎么调用,又该怎么函数中操作元素和地址?

在此,我要拨开这些问题的一些迷雾。 我相信,有心人看完后,再遇就不会怕了。

其实声明,定义是一样的。因此,只写声明。 同时,把元素外层*()剥去就代表地址。因此只写元素。 最后有总结。

二维数组作函数参数,依我看来,至少可以分成三种。

事先,在main函数中 int a[m][n]; 好了,进入主题。

第一种形参为二维数组

声明

void function(int a[m][n]);//函数声明 void function(int a[][n]);//不论多少维数组,第一维都可省略。 //凭什么,第二维就不可省略呢?由编译器的寻址方式决定。

调用

function(a);//函数调用 实参直接写数组名!数组名!(重点)。 //(注意)function(a[m][n])或function(a[][n])都不可以! //话说,写数组名多好,简单轻松。

在函数操控元素

1. *(a[i] + j) //代表第 i 行 第 j 列 2. *(*(a+i) + j) //同上 3. *((int *)a +i*n +j )//同上,n表示第二维数组长度,即列宽 //不管怎么样,a[i][j]不被允许。也是由编译器的寻址方式决定。

第二种形参为数组指针

(其实只是 声明定义 与第一种不同,其他一样) 声明

void function(int (*a)[n]); //不是(int *a[n])(指针数组) ,而是(int (*a)[n])(数组指针); // 缘由是 [] 的 优先级比 *的大

调用

function(a);//函数调用 实参同样直接写数组名! //(注意)function(a[m][n])或function(a[][n])同样都不可以!

在函数操控元素

1. *(a[i] + j) //代表第 i 行 第 j 列 2. *(*(a+i) + j) //同上 3. *((int *)a +i*n +j )//同上,n表示第二维数组长度,即列宽 //a[i][j]不被允许。由编译器的寻址方式决定。

第三种形参为二级指针

声明

void function(int **a,int n);n表示第二维数组长度,即列宽

调用

function( (int **)a,int n);//实参不能为数组名!*与上面相反*!有两个 * ! //(注意)function(a)或function((int *)a)不可以!

在函数操控元素

*((int *)a +i*n +j )//只有一种!n表示第二维数组长度,即列宽 //其他不被允许。由编译器的寻址方式决定。

总结 声明定义(分三种)。 二维数组,数组指针,二级指针。(都是指针) 调用(一对一,二对二) 数组指针,二维数组就写一级指针即 数组名. 二级指针就写二级指针即 (int**)数组名 在函数中操作元素(注意二级指针,只能用最后的方法)

*(a[i] + j) //代表第 i 行 第 j 列*( *(a+i) + j) //同上*( (int * )a +i * n +j )//n表示第二维数组长度(列宽) 也就是说 3. 是万能的。

声明,定义是一样的。 同时,把元素外层()剥去就代表地址。

喜欢就为我点赞,评论加收藏。 转载请标明出处[link]https://blog.csdn.net/qq_43868654/article/details/84641383



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有