二维数组调时候的传参问题 and 一维数组的中括号秘密( [ ] )——实参与形参的对应 —————— 开开开山怪

用「OpenClaw」打造新媒体运营神器:小红书/公众号全自动选题→创作→排版→发布全流程 对于新媒体运营的从业者来说,AI不是要取代运营人员,而是把他们从繁琐的重复劳动中解放出来,专注于更核心的内容策略、用户运营、品牌建设,这才是AI在传统行业落地的真正价值。这是最终输出可发布内容的核心智能体,我们通过「OpenClaw」的Prompt工程,结合不同平台的排版规范,实现了一键生成符合要求的排版,完全替代人工重复劳动。这套系统的落地,不是技术的炫技,而是真正用AI解决了新媒体运营的核心痛点:用自动化替代重复的人工劳动,用数据决策替代经验主义,用全闭环执行替代纸上谈兵的建议。 阅读详情

1> 一维数组的基本知识储备

重要概念 1: 实参与形参: 在c中,实参可以是常量,变量,表达式。但是形参只能是 变量
重要概念 2: 数组结构: 任何数组的式是 type 数组名[ count ] ,数组名是一个指针常量,指类是数组元素的类型
重要概念 3: 指类:指类即指针所指向的空间的元素类型,对于指针变量来说,它的指类就是去掉和这个指针变量紧挨的 * 。任何申请的指针变量的结构都可以为 type * 变量名 。

int * pp的指类的 int , 此时的 type == int
double *** pp的指类是double** ,此时的 type == double**

像我们经常用的数组例如 int array[4] 相当于申请了4个int 空间,array 是数组名,但它的本质是指针常量,是一个地址,是这个数组的首元素首地址,而这个array 的指类是int ,指类的意思是指针所指向的空间的元素的类型。
当我们需要访问这个数组中的某个元素时,我们通常采用array[0], array[1]……,来访问数组中的第一个元素,第二个元素……。
上面说到array是一个指针常量,也代表数组首元素的首地址,对于星号运算符( * )大家应该不陌生,是一个指向运算符,后边可以跟指针常量,指针变量,指针表达式,那对 *array就有两种不同的状态 1:当处于等号的左边是表示array所指向的空间。 2:处于等号的右边,则表示array所指向的空间的值。
当我们采用 array[0] array[1] array[2] 进行访问数组中的元素的时候其实本质如下:

在这里插入图片描述

结论: [ ] 运算符相当于 *( ) 运算符
array[0] = = * (array + 0) == *(0 + array)
array[1] == * (array + 1) == *(1 + array)
在这里插入图片描述

2 > 二维数组的基本知识储备

采用简单的例子说明问题

一维数组 的基本形式 int array[3] 表示申请了三个元素的数组,元素的类型为int类型
二维数组 的基本形式 int array[3][2] 表示这个数组是三行四列,数组中的每个元素的类型为int类型

重点:在上面说到 一维数组 int array [3] 中的array是指针常量,且指类为int类型
而此时的 int array [3] [2] 中的array该怎么解释呢?

由于int array[3][2] 中的 [ 2 ] 离 array 较远可以将 [2] 进行左挪形成 int [2] array[3] 则形成
type array[3] , 此时的数据类型为 type 即 int [2] 。

此时的array同样也是一个指针常量但是一个二阶指针,但此时 array 的指类为 type 即 int [2] ,此时的 array + 1 则移动一个指类的长度即2 * 4 = 16个字节;array + 1 依旧是指针;此时的 array 代表的是 行指针, array + 1 则挪动一行的长度;

在这里插入图片描述

3> 一维数组和二维数组的传参问题

int array[3]

1> 一维数组的实参与形参的传递

void  funOne(int *p);  //函数的声明
void funOne(int *p) { //函数的定义
	
} 

int main() {
  int array[3];
  
  funOne(array);	
  return 0; 
}




//实参与形参传递时要求参数个数一致,参数的顺序一致,参数的类型一致
//此时实参是array是一个一阶指针,指类是int类型,同时形参 p也是一阶指针,且指类为int类型。

2> 二维数组的形参与实参的传递

void funOne();
void funOne() {
}

int main() {
  int array[3][2];

  funOne(array);
  return;
}

对于这个简单二维数组 int array[3][2] 来说,进行形参与实参的传递时,形参应该怎么写?
在上面已经说到不管是几维数组,结构都遵循 type 数组名[count]。
int array[3][2] == int[2] array[3]
type 为 int [2]
array是 指针常量
array所指向的空间的元素类型为int[2] ,这就对应到我一开始说到的指类,
array的指类是int [2];

对比一位数组来看
int array[3] 我们形参变量定义的时候为int *p
int array[3][2] 那对应是不是 int *p[2]呢?

错误写法: int * p[2]
分析: 因为形参实参传递的时候应遵循对应的规则,我们只需要做对应的判断 , 由于 [ ] 运算符的优先级高于 * 运算符,所以 [ ] 与变量 p 紧密结合,而 * 则与 int 进行结合,此时就形成的这样一个局面 int * p[2] ; 发现这个结果就相当于 type 变量名[count] ,那就相当于此时的 p 是一个数组首地址,是在一个指针常量,且指类是 type 即 int * , 这明显与上述的 array 的指类 type 不相同,所以 int * p[2] 是错误写法。

正确的写法: int ( * p)[2]
分析: 上边错误写法是因为 [ ] 运算符降低了 * 与变量 p 的结合性,那我们可以采用 ( ) 来提高 * 与变量 p 的高度结合性, int ( * p)[2] 由于 [ ] 此时并没有与变量 p 进行结合,则 [2] 可以进行左挪形成 int[2] ( * p) 其实这样就相当于 type * 变量名,根据指类的概念 p 的指类为 type 即 int[2] 与 array 对应。

【软考】高项论文写作常见模板 本文主要介绍了YYYY年MM月DD日,我所在公司承接了XXXX项目的建设过程,包括了XXX,XXX,XXX内容,涉及到XXX,XXX,XXX技术。本人在项目中承载着项目经理的角色,主要负责了XXX,XXX,XXX方面事宜。此项目时间紧,任务重,实施过程中,我们特别注重了1、XXX 2、XXX 3、XXX几个方面,经过团队的一致努力,本项目按时交付,运行至今,客户反馈良好。但是在实施过程中,也曝露除了一些问题,包括了XXX,XXX等,通过应急处理和协调,这些问题都得到了妥善解决,没有影响到项目进度。 阅读详情

相关推荐

LayaNative源码编译

修改好后的LayaNative2.0需要重新编译生成Android和iOS所需要的动态库文件。

末之 1358

一维数组及二维数组的传参问题

一维数组的传参 方法一:传数组名 编译器会把这里的 array 解析成指向整型元素的指针,也就是数组的首地址,方括号里面的数组编译器会忽略,写不写都可以,最好不写,以免引起误解。 void test(int array[]) {} 方法二:传指针 array是指向数组的指针,数组名是首元素的地址。 但是在 sizeof(数组名) 和 &(数组名) 两组情况下,数组名指整个数组。 void...

lvxin15353715790的博客 1148

STM32H750实战:用TIM+DMA驱动ADC/DAC实现音频回环(附CubeMX配置避坑指南)

本文详细介绍了在STM32H750上构建高保真、低延迟音频链路的实战方法。通过配置TIM定时器作为硬件节拍器,精准触发ADC采集与DAC播放,并利用DMA实现数据的自动搬运,全程无需CPU干预。文章重点剖析了CubeMX配置中的关键步骤与常见“坑点”,如ADC的Conversion Data Management模式选择、DMA的FIFO与Burst模式配置,以及STM32H7系列必须开启ADC全局中断等,并提供了完整的代码实现与调试验证指南。

1057

4步讲解一维数组传参与二维数组传参

速来看看:耗时3小时打磨而成:4步讲解一维数组传参与二维数组传参!!

weixin_64308540的博客 1285

2026年4月AI爆发周:阿里连推三款模型、字节全双工语音上线,国内大模型进入“落地竞速“新阶段

**摘要:**2026年4月初,国内AI大模型迎来密集发布,阿里、字节、腾讯分别推出新产品。阿里一周发布三款模型,覆盖通用推理、多模态轻量化和长文档处理,API价格大幅下降;字节推出全双工语音模型,实现实时交互,技术难度高;腾讯混元3.0强调工程化和生态整合,面向企业私有化部署。趋势显示,行业从性能竞赛转向落地竞赛,多模态成为主战场,API成本降低,开发者选择更丰富。国内大模型竞争重点转向实际应用和生态整合。

weixin_45526015的博客 1万+

SpringBoot SSE避坑指南:当客户端突然断开时服务端SseEmitter的正确回收姿势

本文深入探讨了SpringBoot中SSE连接的生命周期管理,特别是客户端主动断开连接时服务端SseEmitter的正确回收机制。文章重点分析了客户端调用eventSource.cancel()等场景下,如何利用onCompletion()回调进行可靠的资源清理,避免内存泄漏,并提供了防御式编程策略和实战优化建议。

mm9012的博客 777

C语言二维数组做为实参/形参传递给函数的方式总结

假设main函数中定义了一个数组: int data[3][10] 一、传递形参(函数中只能使用数组参数,无法修改) 1.函数中的写法 void func(int array[][10]) { tmp=array[i][j]; } void func(int array[3][10]) { tmp=array[i][j]; } void func(int(*array)[1...

rock4you 1万+

提升仿真效率:Synopsys VCS高级编译选项优化技巧(2023最新版)

本文深入探讨了Synopsys VCS 2023版本中的高级编译选项优化技巧,帮助工程师提升仿真效率。通过并行编译、智能代码分析、精准覆盖率采样等策略,结合真实案例展示如何显著缩短仿真周期并优化资源使用,适用于数字芯片验证和大型SoC设计。

weixin_30338481的博客 113

同样是将数组首地址存入指针变量里面,为什么有时加*有时不加*呢?

笔者为纯初学者,在通过小甲鱼的c语言教程进行自学时,学到了指针数组与数组指针这一章,果不其然,指针的学习难度很大,笔者对于很多习题都是处于完全不会做的情况。在论坛上搜寻相关资料时,偶然遇见一个坛友提出一个很有趣的问题,对此,笔者也同样有疑问,故以实验寻求其答案,提出不成熟之猜想,望与诸君共勉。 由图可知,target,*target,以及一维数组str的第一个元素实则拥有同一个地址,故不难发现,数组指针实则指向了数组的第一个元素的地址。 在百度百科上同样指出a[0]是第一个一..

m0_62304174的博客 1193

20、七鳃鳗繁殖与早期生活史:从水质到养殖的全面解析

本文全面解析了七鳃鳗的繁殖与早期生活史,重点探讨了水质对幼体生存的影响、养殖密度与生长关系、变态过程的时间与大小特征,以及人工繁殖在濒危物种恢复和入侵物种控制中的应用。同时,文章分析了大规模养殖面临的挖掘基质需求、空间限制、清洁管理、疾病防控及微生物环境等挑战,并强调实验室养殖对科学研究和种群管理的重要意义。随着技术进步,未来有望扩展更多物种的繁殖研究,揭示七鳃鳗生物学的进化奥秘,实现资源的可持续利用。

l6m7n8的博客 116

Darknet-Yolov3 移植过程

本教程面向使用寒武纪平台进行深度学习推理任务的开发者。针对当前主流检测网络darknet-yolov3,进行寒武纪平台的移植。开发者对照移植过程,能够利用寒武纪智能处理器设备完成多种场景的目标检测任务。本实验代码基于 Neuware 1.6.1 与 Python 2.7 环境。

shengyin714959的博客 438

二维数组名不能作为指针传递

二维数组名即数组地址,指向首行地址,表面上看,行地址即一维数组指针,而数组名指向行就应该是指针的指针,但是必须注意指针也是有类型的,类型不同数据宽度也不同。 如果a[10][10],假设int **p=a; 那么要对行递增执行p++时,编译器如何知道列宽?因为int **是指指向一个 int 类型的指针,32位系统中int 的宽度为4字节,即地址宽度是4字节,因此p将指向下一个元素(整数指针),也...

weixin_42916705的博客 792

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C/C++中二维数组作为形参传递参数

`param1`为二维数组,在函数`void total_score_of_each_stu(param1, param2, param3,param4)`中该以怎样的形参形式去接收函数调用时实参传递的参数?

weixin_45615071的博客 4303

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

数组的使用的几个注意

我们有时会遇到*a或者*(&a)之类的数组使用,a为数组名。那么今天就来简单介绍一下这些: 比如说我们定义一维数组 int a[100]; 我们都知道一维指针名 a 保存的是数组首元素的地址,那么是否我们对数组进行遍历就可以像指针一样 a++ 来遍历呢? 答案是不能,因为上面数组首字母的解释并不完整,完整的说法是一维数组名是一个指针常量,它保存数组首元素的地址。 而我们知道,常量是保存在全

wp1995的博客 819

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

关于二维数组传参做形参

二维数组的存储方式是和一维数组没什么区别,但是用二维数组做参数,它的形参该怎样写?要注意的是:函数中的形参其实就相当于一个声明,并不产生内存分配,形参的目的就是要让编译器知道函数参数的数据类型。 正确的是:void Func(int array[3][10]); void

6万+

易懂的数组作为函数参数(C语言)

易懂的数组作为函数参数(C语言) 目录易懂的数组作为函数参数(C语言)1、数组做函数参数2、通过形参数组修改数组元素3、数组排序 1、数组做函数参数 (1)、若将一个数组作为实际参数传递给函数,只需不带方括号的数组名即可 若数组a的定义为:int a[10]; 若要将数组a作为实参传递给被调用函数SumArr(), 则调用语句可写成:SumArr(a,10); 数组名代表数组首元素的地址,因此数组名做参数就可以将数组的起始地址传递给形参。另外需要将数组元素的个数也传递给被调用的函数。 函数SumArr()

lflcodeplus的博客 7860

解决前端发axios请求传输数组参数给后端时,请求路径中的数组参数带中括号[]

问题描述 今天在做项目某部分功能时,后端接口接收一个数组参数,前端向后端发起axios get请求时,请求路径中的数组参数始终带有中括号[],导致后端一直报400错误… 正确请求路径: http://127.0.0.1:9000/bridgeMonitorContent/getContentByTypeIds?monitorTypeIds=LF-SWJTU&monitorTypeIds=ND-SWJTU 实际请求路径: http://127.0.0.1:9000/xboot/bridgeMonit

少年Dream 6645

数组的形参与实参,通过引用传递数组

在《C++ Primer 第四版》的第七章中,讲到了通过引用传递数组,和其他类型一样,数组形参可声明为数组的引用。如果形参是数组的引用,编译器不会将数组实参转化为指针,而是传递数组的引用本身。在这种情况下,数组大小成为形参与实参类型的一部分,编译器检查数组实参的大小与形参的大小是否匹配。 #include using namespace std; void output(int (&a)[13

nuptxiaoli 7573

C语言数组中,数组名在中括号中(即 [array])是什么意思?

#include <stdio.h> int main() { int array[3]= { 1, 2, 3 }; printf("%d\n", 1[array]); // 2,注意 printf("%d\n", [array]);将报错 printf("%d\n", -1[array]); // -2 return 0; } 输出:   分析...

a3192048的博客 1万+

二维数组做形参或实参是出现的问题

可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以可以指 定所有维数的大小,也可以省略第一维的大小说明,如:     void Func(int array[3][10]);     void Func(int array[][10]);     二者都是合法而且等价,但是不能把第二维或者更高维的大小省略,如下面的定义是 不合法的:     void Func(in

学习专栏 1319

二维数组名作为实参或者形参

可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以可以指 定所有维数的大小,也可以省略第一维的大小说明,如:    void Func(int array[3][10]);    void Func(int array[][10]);    二者都是合法而且等价,但是不能把第二维或者更高维的大小省略,如下面的定义是不合法的:    void Func(int array[

luxingqiang110的专栏 997

字符串和数组作为参数传递

链接:https://www.zhihu.com/question/31203609/answer/50992895 1. 类1: public class ArrayTest { //都是引用传递,输出的结果是"goodbbb" public void arrayPassTest(String s, String[] ss) { ...

viking_xhg的博客 2万+
上一篇: 3大类6种排序 插入排序 选择排序 冒泡排序 希尔排序 堆排序 快速排序 —————— 开开开山怪
下一篇: 巨大数的运算 (前篇 ——对于整数) # 万进制 # —————— 开开开山怪
开开开山怪
博客等级 码龄8年 41粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值