【C 语言】数组 ( 一维数组形参退化 | 二维数组形参退化 | 函数形参等价关系 )
2023-06-13 09:18:00 时间
文章目录
一、一维数组形参退化
C 中将 一维数组 作为参数 , 传递到函数中 , 该 一维数组 会退化为 指针 ;
将
int array[10]
数组 , 作为参数 , 传递到函数中 ,
void fun(int array[1000]){}
与
void fun(int *array){}
是等价的 , 函数中处理 array
数组时 , 不知道该数组的元素个数 , 编译器只能确认 , 该参数是一个 int *
指针类型 ;
这样操作是为了提高 编译器 的效率 , 提高程序执行的效率 , 函数的 形参 最终要拷贝到 栈内存 中 ,
- 如果将整个数组作为形参 , 需要拷贝整个数组的内容 , 如果数组有
个元素 , 需要拷贝
字节 , 这样效率就很低了 ;
- 如果只需要拷贝数组地址 , 这个地址存放在指针变量中 , 只需要传递
字节就可以了 ;
一维数组 形参 退化路径 :
int array[1000]
void fun(int array[1000])
{
}
int array[]
void fun(int array[])
{
}
int *array
void fun(int *array)
{
}
二、二维数组形参退化
二维数组 作为 函数形参 , 也会退化为指针 ;
将 二维数组 看作 一维数组 ,
- 一维数组 中每个元素是 实际的数据 ,
- 二维数组 中每个元素是 一维数组 ;
一维数组 退化时 , 退化为 指向 一维数组元素 的 指针 ;
二维数组 退化时 , 退化为 指向 二维数组元素 的 指针 , 这个 二维数组元素 就是 一维数组 , 也就是退化为 指向 一维数组的指针 ;
特别注意 , 二维数组 退化的 指针 , 指向的 一维数组 是有效的 , 可以得到数组的元素个数 , 是一个正式的数组 ;
二维数组 形参 退化路径 :
int array[10][20]
void fun(int array[10][20])
{
}
int array[][20]
void fun(int array[][20])
{
}
int (*array)[20]
: 此处注意 , 数组指针 指向的 一维数组 是完整的数组 ;
void fun(int (*array)[20])
{
}
三、数组形参等价关系
实参为 一维数组 int array[10]
, 等效的 形参为 一级指针 int *array
;
- 一维数组 , 直接退化为 指向 数组元素的指针 , 数组元素是 普通类型 , 指向普通类型的指针 , 即 一级指针 ;
实参为 指针数组 int *array[10]
, 等效的 形参为 一级指针 int **array
;
- 指针数组 是 数组的元素 都是 指针变量 ;
- 数组退化为 指针 , 指针指向的元素 也是 指针 , 则形参为 二级指针 ;
实参为 二维数组 int array[10][20]
, 等效的 形参为 一级指针 int (*array)[20]
;
- 二维数组 的 数组的元素 是 一维数组 ;
- 外围数组 ( 第二维 ) 退化为 指针 , 指针 指向的元素 是 一维数组 , 则形参为 指向 一维数组 的指针 , 每个一维数组有
个元素 ;
相关文章
- 巧如范金,精比琢玉,一分钟高效打造精美详实的Go语言技术简历(Golang1.18)
- c语言数组介绍
- 《软件安装与使用教程》— Python语言常用开发工具Spyder、Pycharm、VS Code、Jupyter的使用「建议收藏」
- [javascript] js如何获取浏览器的语言
- 分别用冒泡法和选择法对10个整数排序_c语言数组从大到小冒泡排序
- python用冒泡法排序_数组冒泡排序c语言函数
- 2022-09-22:以下go语言代码输出什么?A:5、B:不能编译;C:运行时死锁。package mainimport (
- c语言超出数组范围会怎样_有一个整型数组a,其中含有n个元素
- c语言递归求组合数_c语言求一维数组元素之和
- 研究人员提出“LViT”,一种利用文本医学报告改进分割的语言视觉模型
- GoLang11 - Go语言数组
- 数据分享|R语言PCA主成分、lasso、岭回归降维分析近年来各国土地面积变化影响
- js 数组去除重复数据-当WPS开始像支持VBA一样支持JS语言时,微软又该何去何从?
- 【代码笔记】c语言数组学习
- Android 本地化翻译插件,一键将你的 strings.xml 翻译为最多 104 种语言,告别手动复制黏贴
- 腾讯发布 2022 研发大数据报告:Go 语言蝉联最热编程语言
- 【C 语言】文件操作 ( 读文本文件 | 文本加密解密 | fgets 函数 | fputs 函数 )
- 【C 语言】数组作为参数退化为指针问题 ( 问题描述 | 从编译器角度分析该问题 | 出于提高 C 语言执行效率角度考虑 | 数组作为参数的推荐方案 )
- 【C 语言】内存四区原理 ( 栈内存属性增长方向 | 栈内存开口方向 | 代码示例 )
- 【C 语言】二级指针作为输入 ( 指针数组 | 将 二级指针 作为函数输入 | 抽象函数业务逻辑 )
- 【C 语言】二级指针案例 ( 字符串切割 | 返回 二维数组 作为结果 )
- 【C 语言】数组 ( 数组类型表达 | 定义数组类型 )
- 【C 语言】数组 ( 指针退化验证 | 计算数组大小 | #define LENGTH(array) (sizeof(array) / sizeof(*array)) )
- Go语言整型(整数类型)
- Go语言圣经–复合数据类型,数组习题详解编程语言
- 文Linux输入汉字:解决文件语言问题(linux输入文件中)
- c语言中用位运算实现加法技巧介绍
- c语言中getch,getche,getchar的区别
- 深入理解c语言数组
- GO语言数组和切片实例详解