首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【C语言笔记】关于二维数组作为函数参数的问题

【C语言笔记】关于二维数组作为函数参数的问题

作者头像
正念君
发布于 2019-06-26 08:32:43
发布于 2019-06-26 08:32:43
4K00
代码可运行
举报
文章被收录于专栏:嵌入式大杂烩嵌入式大杂烩
运行总次数:0
代码可运行

在构建过二维数组作为函数的参数时遇到了一个问题。首先,我们看一个函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void func1(int **array, int m, int n)
{
 int i = 0, j = 0;

 for ( i = 0; i < m; i++ )
 {
   for ( j = 0; j < n; j++ )
   {
     //printf("%d ", array[i][j] );
     printf("%d ", *(*(array+i)+j) );  
   }
 }
}

函数设计的功能很简单,就是打印输出二维数组中的所有元素。

假如我们的主函数为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main(void)
{
 int a[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };

 func1((int**)a, 3, 3); 

 return 0;
}

大家觉得输出结果会是什么呢?结果是什么都没输出。出错原因是因为二维数组作为函数参数时要给出二维长度。但是,是不是就不能使用这个函数了呢?还是可以使用的,只要在主函数中定义一个指针数组作为中间桥梁即可正确输出。即主函数修改为如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main(void)
{
 int a[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
 int *p[3];

 p[0] = &a[0][0];    //a[0]
 p[1] = &a[1][0];    //a[1]
 p[2] = &a[2][0];    //a[2]
 func1(p, 3, 3); 

 return 0;
}         

定义一个指针数组,该指针数组中的元素分别指向每一行的第一个元素。再把该指针数组作为形参传入func1函数中。

除此之外,还有如下三种方法构造函数:

(1)形参声明为一级指针

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void func2(int *array, int m, int n)
{
 int i = 0;

 for ( i = 0; i < m*n; i++ )
 {
   printf("%d ", array[i]);
 }
}

(2)形参给出二维长度

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void func3(int array[][3], int len)   
{
 int i = 0, j = 0;

 for ( i = 0; i < len; i++ )
 {
   for ( j = 0; j < 3; j++ )
   {
     printf("%d ", array[i][j]);
   }
 }
}

(3)形参声明为指向数组的指针(数组指针)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void func4(int (*array)[3], int len)
{
 int i = 0, j = 0;

 for ( i = 0; i < len; i++ )
 {
   for ( j = 0; j < 3; j++ )
   {
     printf("%d ", array[i][j]);
   }
 }
}

以上代码关于二维数组作为函数参数时,函数的定义方法。如有错误,欢迎指出~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
熬夜整理的万字C/C++总结(三),值得收藏
可以使用 C 对变量中的个别位进行操作。您可能对人们想这样做的原因感到奇怪。这种能力有时确实是必须的,或者至少是有用的。C 提供位的逻辑运算符和移位运算符。在以下例子中,我们将使用二进制计数法写出值,以便您可以了解对位发生的操作。在一个实际程序中,您可以使用一般的形式的整数变量或常量。例如不适用 00011001 的形式,而写为 25 或者 031 或者 0x19.在我们的例子中,我们将使用8位数字,从左到右,每位的编号是 7 到 0。
C语言与CPP编程
2021/08/03
7180
C语言进阶指南(11)(指针数组与二维数组)
指针变量是一个存放地址的变量,在C语言中,每个变量都会有一个地址值。所以指针变量也有一个地址。
代码小豪
2024/06/20
2111
【C语言期末不挂科——指针进阶篇】【上】
  指针的类型里面我们知道有一种指针 类型为 字符指针(char *),经过初阶的学习我们已经能用:
用户11029129
2024/06/04
1130
【C语言期末不挂科——指针进阶篇】【上】
【C 语言】二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )
此处遍历时 , 注意指针的步长 ,传入一个二级指针 char ** , 会出错 , 如果传入 二级指针 , array[i] 等同于 *(array + i) , array 的步长是 10 ;
韩曙亮
2023/03/29
1.2K0
【C 语言】二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )
C语言多维数组与指针-学习二十四
本文最后更新于2022年02月19日,已超过8天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
XG.孤梦
2022/03/01
4730
C语言多维数组与指针-学习二十四
轻松拿捏C语言——【保姆级·指针讲解】期末C语言<指针>急救包,全是干货,诚意满满!
有一栋楼,里有200个房间,假如我们要去某个房间找某个人,然后他说他在C304,我们就能通过门牌号C304快速找到他所在房间。
用户11162265
2024/06/14
1760
轻松拿捏C语言——【保姆级·指针讲解】期末C语言<指针>急救包,全是干货,诚意满满!
关于我、重生到500年前凭借C语言改变世界科技vlog.13——深入理解指针(3)
字符指针变量,顾名思义就是字符类型的指针,即 char* 常见的输出格式是这样的:
DARLING Zero two
2024/11/19
680
关于我、重生到500年前凭借C语言改变世界科技vlog.13——深入理解指针(3)
C语言:使用malloc函数模拟开辟一个二维数组
先创建一个存放3个指针的数组,再通过数组中存放的指针分别找到对应开辟的5个整型大小的空间,但是这种方法无法确保二维数组中每一行的空间是连续的,并且最后利用free进行内存释放时也比较麻烦。
P_M_P
2024/01/18
3570
c语言从入门到实战——基于指针的数组与指针数组
基于指针的数组(Array of Pointers)和指针数组(Pointer to Array)是两种常见的C/C++语言中的数据结构,它们在内存布局和使用方式上有所不同。
鲜于言悠
2024/03/20
4540
c语言从入门到实战——基于指针的数组与指针数组
指针详解(二级指针、指针数组和数组指针、字符指针、二维数组传参、函数指针变量)(二)
走在努力路上的自己
2024/01/26
9490
指针详解(二级指针、指针数组和数组指针、字符指针、二维数组传参、函数指针变量)(二)
详解Leetcode中关于malloc模拟开辟二维数组问题,涉及二维数组的题目所给函数中的各个参数的解读
最近博主一直再刷Leetcode上有关c语言的题目,有些题目第一步就将我卡死了。为什么呢?因为题目中所给的函数里的参数的具体含义我既然都不知道是什么意思。当然在请教了一些大佬后我也顺利解决了,不然也不会有人和你们分享了,哈哈哈~ 我就已一个典型的题目来介绍吧:题目链接: 2373. 矩阵中的局部最大值
用户11029269
2024/03/19
2780
【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )
将 指针数组 和 二维数组 中的数据 拷贝到 自定义二级指针 内存模型中 , 并进行排序 ;
韩曙亮
2023/03/30
7830
【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )
C语言入门系列之8.指针的概念与应用
指针是C语言中的一个重要的概念,也是C语言的一个重要特色。 正确而灵活地运用它,可以有效地表示复杂的数据结构;能动态分配内存;能方便地使用字符串;有效而方便地使用数组等。 掌握指针的应用,可以使程序简洁、紧凑、高效。可以说,不掌握指针就是没有掌握C的精华。
cutercorley
2020/07/23
1.5K0
C语言入门系列之8.指针的概念与应用
【c语言日寄】二维数组的深度解构
在C语言中,数组是一种非常基础且重要的数据结构。然而,许多初学者对二维数组的本质理解不够深入,导致在使用时出现各种问题。本文将通过一个简单的程序引入,深入分析二维数组的本质,并探讨其注意事项,帮助读者更好地理解和掌握二维数组。
siy2333
2025/03/04
1470
c语言从入门到实战——数组指针与函数指针
数组指针和函数指针是C语言中的两种重要指针类型。数组指针指向一个数组,可以用来访问和修改数组中的元素;而函数指针则指向一个函数,可以用来调用该函数。两者在语法和用法上有所不同,需要仔细区分。正确理解和使用它们可以提高程序的效率和可维护性。
鲜于言悠
2024/03/20
2380
c语言从入门到实战——数组指针与函数指针
c语言—数组详解(建议收藏)
注:数组创建, [] 中要给一个常量才可以,不能使用变量。可以直接用常量,或者使用宏定义。
全栈程序员站长
2022/09/16
5530
c语言—数组详解(建议收藏)
C++ 创建动态二维数组
在C++中创建数组的时候需要声明数组的长度,在声明一个二维数组的参数时,则至少需要确认第二维的长度,否则就无法完成编译。 为什么呢,我们可以用一张图来表示c++二维数组在内存中的表示就理解了。
雪碧君
2023/02/15
1.1K0
C语言数组
数组创建,在 C99 标准之前, [] 中要给一个常量才可以 ,不能使用变量。在 C99 标准支持了变长数
绝活蛋炒饭
2024/12/16
6480
C语言数组
C 二维数组和指针、函数指针、typedef等的一些笔记
&arr是指整个数组的首地址,而arr是指数组首元素的首地址,虽然所表示的意义不同,但二者之间的值却是相同的。
小锋学长生活大爆炸
2022/03/29
7280
C 二维数组和指针、函数指针、typedef等的一些笔记
【C 语言】二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )
指针数组 的 结构特征 是 , 数组中的每个元素 , 即每个指针变量 可以 指向不同大小的 内存块 ;
韩曙亮
2023/03/29
1.9K0
【C 语言】二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )
推荐阅读
熬夜整理的万字C/C++总结(三),值得收藏
7180
C语言进阶指南(11)(指针数组与二维数组)
2111
【C语言期末不挂科——指针进阶篇】【上】
1130
【C 语言】二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )
1.2K0
C语言多维数组与指针-学习二十四
4730
轻松拿捏C语言——【保姆级·指针讲解】期末C语言<指针>急救包,全是干货,诚意满满!
1760
关于我、重生到500年前凭借C语言改变世界科技vlog.13——深入理解指针(3)
680
C语言:使用malloc函数模拟开辟一个二维数组
3570
c语言从入门到实战——基于指针的数组与指针数组
4540
指针详解(二级指针、指针数组和数组指针、字符指针、二维数组传参、函数指针变量)(二)
9490
详解Leetcode中关于malloc模拟开辟二维数组问题,涉及二维数组的题目所给函数中的各个参数的解读
2780
【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )
7830
C语言入门系列之8.指针的概念与应用
1.5K0
【c语言日寄】二维数组的深度解构
1470
c语言从入门到实战——数组指针与函数指针
2380
c语言—数组详解(建议收藏)
5530
C++ 创建动态二维数组
1.1K0
C语言数组
6480
C 二维数组和指针、函数指针、typedef等的一些笔记
7280
【C 语言】二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )
1.9K0
相关推荐
熬夜整理的万字C/C++总结(三),值得收藏
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档