C语言:二维数组传参的格式(详细+总结)
希望能帮助到你,我将无比快乐。
你的点赞✌️,是我前进的动力。
初遇二维数组作函数参数,宛如自己化身为了大头儿子。很头大。
不禁大声呐喊:该怎么声明定义,该怎么调用,又该怎么函数中操作元素和地址?
在此,我要拨开这些问题的一些迷雾。
我相信,有心人看完后,再遇就不会怕了。
其实声明,定义是一样的。因此,只写声明。
同时,把元素外层*()剥去就代表地址。因此只写元素。
最后有总结。
二维数组作函数参数,依我看来,至少可以分成三种。
事先,在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
C语言:二维数组传参的格式(详细+总结)相关推荐
- 【概念辨析】二维数组传参的几种可能性
一.二维数组传参竟然不是用二级指针进行接收? 今天进行再一次的二级指针学习时,发现了一条以前没怎么注意过的知识点:二维数组进行传参只能用二维数组(不能省略列)进行接收或者是数组指针. ...
- 什么是二维数组以及二维数组传参
什么是二维数组 当刚看见二维数组时肯定会对二维数组有一些疑惑二维数组是什么? int arr[4] = { 1,2,3,4 };//这个便是一维数组 以 int 类型为例子当 int 类型的元素集合在 ...
- 二维数组传参||传值
先给出问题: 像下面这样的数组,在函数中如何传参?也就是说如何保证虚参与实参类型一致. char str_arr[3][10] = {"yes","no",&q ...
- c语言字符二维数组传参,C语言函数传递二维数组
C语言如果给函数传递二维数组作为参数 问题的产生 先看一个传递二维数组的例子: #include void foo(int a[][], int m, int n) { int i = 1; int ...
- 漏刻有时API接口实战开发系列(13):小鹅通云服务PHP-API二维数组传参解决方案
在使用小鹅通云服务API开发过程中,当传递二维数组时,后台总是提示The user id list must be an array.即传递的参数必须是数组. 文档请求标准格式 {"acce ...
- 关于二维数组传参做形参
二维数组的存储方式是和一维数组没什么区别,但是用二维数组做参数,它的形参该怎样写?要注意的是:函数中的形参其实就相当于一个声明,并不产生内存分配,形参的目的就是要让编译器知道函数参数的数据类型. 正确 ...
- 如何把二维数组传参给函数
1.传递"数组指针" #include <stdio.h>void output( int (*pa)[3], int n ) //这个函数只能输出n行3列的二维数组 ...
- 多维数组之二维数组传参、返回值、申请内存问题
目录 多维数组 存储顺序 二维数组基础知识 数组名 下标 指向数组的指针 二维数组使用 初始化 作为函数参数的二维数组 二维数组返回值与申请内存问题 多维数组 如果某个数组的维数不止1个,它就被称为多 ...
- C/C++语言二维数组的传参方法总结
原创作品,转载时请务必以超链接形式标明文章原始出处:http://blog.csdn.net/gqb666/article/details/8886687,作者:gqb666 C/C++语言将二维数组 ...
- 【让你从0到1学会C语言】指针/数组传参以及static关键字
作者:喜欢猫咪的的程序员 专栏:<C语言> 喜欢的话:世间因为少年的挺身而出,而更加瑰丽. --<人民日报> ...
最新文章
- git 忽略指定文件夹的上传
- eSpeak: Linux 文本转语音工具
- Android使用SQLite数据库(1)
- apache2 默认端口修改
- 金融领域下的数据挖掘算法应用:逻辑回归模型
- Mangos源码分析(3):服务器结构探讨之简单的世界服实现
- gRaphael——JavaScript 矢量图表库:两行代码实现精美图表
- SAP 产品 UI 里的容器组件的概念和开发概述
- Windows访问令牌相关使用方法
- (计算机组成原理)第四章指令系统-第一节2:扩展操作码
- windows上编译和安装hadoop2 (一)
- 计算机无法创建新文件夹,无法创建文件,小编教你无法新建文件夹怎么办
- 基于Python的飞机大战游戏系统设计与实现
- IAP商品修改和数据获取,一文带你全部搞懂
- 正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。
- 内置方法和模块的应用
- 企业文件防泄密整体解决方案
- 关于四芯网线上网的奇怪问题
- Sybase 报错码 JZ0SA 、JZ0SB、JZ0S3、JZ0R2
- 有数Bizhelp帮助文档在线制作软件官方
热门文章
- 使用QRCode.js生成二维码
- 我所理解的生活(韩寒)
- Uncode-DAL 1.0.18 发布,Java 通用数据访问层
- 2021年全国职业院校技能大赛(中职组)网络安全竞赛试题(3)(总分100分)
- scum服务器在线玩家,SCUM服务器选择推荐 官服跟私服有什么区别
- 一个非常好用的免费图床
- AcrGIS 做成本距离分析时提示ERROR 999999:无法启动配置 RasterCommander.ImageServer
- Windows10桌面IE浏览器图标无法删除的解决方案
- 基于属性词补全的武器装备属性抽取研究
- html5在线视频编辑器,WeVideo:视频编辑器