Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【C语言笔记】关于二维数组作为函数参数的问题

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

作者头像
正念君
发布于 2019-06-26 08:32:43
发布于 2019-06-26 08:32:43
3.9K00
代码可运行
举报
文章被收录于专栏:嵌入式大杂烩嵌入式大杂烩
运行总次数: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语言中将二维数组作为函数参数来传递
#include <stdio.h> void func(int n, char  str[ ][5] ) {  int i;  for(i = 0; i < n; i++)   printf("/nstr[%d] = %s/n", i, str[i]); }
Twcat_tree
2022/11/30
2.5K0
【C 语言】二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )
此处遍历时 , 注意指针的步长 ,传入一个二级指针 char ** , 会出错 , 如果传入 二级指针 , array[i] 等同于 *(array + i) , array 的步长是 10 ;
韩曙亮
2023/03/29
1.1K0
【C 语言】二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )
C语言进阶指南(11)(指针数组与二维数组)
指针变量是一个存放地址的变量,在C语言中,每个变量都会有一个地址值。所以指针变量也有一个地址。
代码小豪
2024/06/20
1891
指针详解(二级指针、指针数组和数组指针、字符指针、二维数组传参、函数指针变量)(二)
走在努力路上的自己
2024/01/26
8690
指针详解(二级指针、指针数组和数组指针、字符指针、二维数组传参、函数指针变量)(二)
函数(四)(数组作为函数参数)
一是数组元素作为函数参数,这种情况下与简单变量作为函数的参数完全一样,数组元素的值被单向传递给形参变量。
pigeon
2022/04/11
1.9K0
函数(四)(数组作为函数参数)
【C语言】深入解开指针(四)
通过对前面指针的学习,你可能对指针有了一些理解,比如,数字名的理解,然后怎么使用指针来访问数组,二级指针,指针数组 …
学习起来吧
2024/02/29
1740
【C语言】深入解开指针(四)
【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )
将 指针数组 和 二维数组 中的数据 拷贝到 自定义二级指针 内存模型中 , 并进行排序 ;
韩曙亮
2023/03/30
7450
【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )
C语言数组作为函数参数-学习十九
本文最后更新于2022年02月13日,已超过15天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
XG.孤梦
2022/03/01
1.9K0
C语言数组作为函数参数-学习十九
c语言二维数组传参数_c语言数组传参
其实声明,定义是一样的。因此,只写声明。 同时,把元素外层*()剥去就代表地址。因此只写元素。 最后有总结。
全栈程序员站长
2022/11/15
3K0
轻松拿捏C语言——【保姆级·指针讲解】期末C语言<指针>急救包,全是干货,诚意满满!
有一栋楼,里有200个房间,假如我们要去某个房间找某个人,然后他说他在C304,我们就能通过门牌号C304快速找到他所在房间。
用户11162265
2024/06/14
1630
轻松拿捏C语言——【保姆级·指针讲解】期末C语言<指针>急救包,全是干货,诚意满满!
c语言—数组详解(建议收藏)
注:数组创建, [] 中要给一个常量才可以,不能使用变量。可以直接用常量,或者使用宏定义。
全栈程序员站长
2022/09/16
5390
c语言—数组详解(建议收藏)
c语言从入门到实战——基于指针的数组与指针数组
基于指针的数组(Array of Pointers)和指针数组(Pointer to Array)是两种常见的C/C++语言中的数据结构,它们在内存布局和使用方式上有所不同。
鲜于言悠
2024/03/20
3990
c语言从入门到实战——基于指针的数组与指针数组
江哥带你玩转C语言| 12 -二维数组和字符串
如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是江哥持续更新的动力。
极客江南
2021/07/11
1.5K0
C语言入门系列之8.指针的概念与应用
指针是C语言中的一个重要的概念,也是C语言的一个重要特色。 正确而灵活地运用它,可以有效地表示复杂的数据结构;能动态分配内存;能方便地使用字符串;有效而方便地使用数组等。 掌握指针的应用,可以使程序简洁、紧凑、高效。可以说,不掌握指针就是没有掌握C的精华。
cutercorley
2020/07/23
1.5K0
C语言入门系列之8.指针的概念与应用
【C 语言】数组 ( 验证二维数组内存是线性的 | 打印二维数组 | 以一维数组方式打印二维数组 | 打印二维数组值和地址 )
定义一个函数 , 函数接收一个 int* 形参指针 , 使用该指针访问二维数组中的元素个数 , 也可以成功访问 ;
韩曙亮
2023/03/29
3K0
【C 语言】数组 ( 验证二维数组内存是线性的 | 打印二维数组 | 以一维数组方式打印二维数组 | 打印二维数组值和地址 )
【C 语言】二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )
指针数组 的 结构特征 是 , 数组中的每个元素 , 即每个指针变量 可以 指向不同大小的 内存块 ;
韩曙亮
2023/03/29
1.9K0
【C 语言】二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )
C语言数组当参数传递
一般来数参数的传递是值传递,也就是说实参传给形参,形参发生改变时实参并不会改变,(单向)但是数组在传递的时候是地址传递,只要形参发生了变化,实参也会发生变化(双向)。
全栈程序员站长
2022/09/08
2.3K0
C语言中数组长度的计算详解
C语言字符串长度的计算可以使用strlen(str); 但是对于数组长度的大小却没有相关函数可以使用;
一个会写诗的程序员
2023/01/08
3.5K0
C语言中数组长度的计算详解
C 二维数组和指针、函数指针、typedef等的一些笔记
&arr是指整个数组的首地址,而arr是指数组首元素的首地址,虽然所表示的意义不同,但二者之间的值却是相同的。
小锋学长生活大爆炸
2022/03/29
7110
C 二维数组和指针、函数指针、typedef等的一些笔记
【c语言日寄】二维数组的深度解构
在C语言中,数组是一种非常基础且重要的数据结构。然而,许多初学者对二维数组的本质理解不够深入,导致在使用时出现各种问题。本文将通过一个简单的程序引入,深入分析二维数组的本质,并探讨其注意事项,帮助读者更好地理解和掌握二维数组。
siy2333
2025/03/04
1220
推荐阅读
C语言中将二维数组作为函数参数来传递
2.5K0
【C 语言】二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )
1.1K0
C语言进阶指南(11)(指针数组与二维数组)
1891
指针详解(二级指针、指针数组和数组指针、字符指针、二维数组传参、函数指针变量)(二)
8690
函数(四)(数组作为函数参数)
1.9K0
【C语言】深入解开指针(四)
1740
【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )
7450
C语言数组作为函数参数-学习十九
1.9K0
c语言二维数组传参数_c语言数组传参
3K0
轻松拿捏C语言——【保姆级·指针讲解】期末C语言<指针>急救包,全是干货,诚意满满!
1630
c语言—数组详解(建议收藏)
5390
c语言从入门到实战——基于指针的数组与指针数组
3990
江哥带你玩转C语言| 12 -二维数组和字符串
1.5K0
C语言入门系列之8.指针的概念与应用
1.5K0
【C 语言】数组 ( 验证二维数组内存是线性的 | 打印二维数组 | 以一维数组方式打印二维数组 | 打印二维数组值和地址 )
3K0
【C 语言】二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )
1.9K0
C语言数组当参数传递
2.3K0
C语言中数组长度的计算详解
3.5K0
C 二维数组和指针、函数指针、typedef等的一些笔记
7110
【c语言日寄】二维数组的深度解构
1220
相关推荐
C语言中将二维数组作为函数参数来传递
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验