首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C 语言】数组 ( 一维数组退化 | 二维数组退化 | 函数形等价关系 )

文章目录 一、一维数组退化 二、二维数组退化 三、数组等价关系 一、一维数组退化 ---- C 中将 一维数组 作为参数 , 传递到函数中 , 该 一维数组 会退化为 指针 ; 将 int...中 , 如果将整个数组作为形 , 需要拷贝整个数组的内容 , 如果数组有 1000 个元素 , 需要拷贝 4000 字节 , 这样效率就很低了 ; 如果只需要拷贝数组地址 , 这个地址存放在指针变量中...(int array[]) { } int *array void fun(int *array) { } 二、二维数组退化 ---- 二维数组 作为 函数形 , 也会退化为指针 ; 将 二维数组...也是 指针 , 则形为 二级指针 ; 实参为 二维数组 int array[10][20] , 等效的 形为 一级指针 int (*array)[20] ; 二维数组数组的元素 是 一维数组...; 外围数组 ( 第二维 ) 退化为 指针 , 指针 指向的元素 是 一维数组 , 则形为 指向 一维数组 的指针 , 每个一维数组有 20 个元素 ;

2.7K10

c语言二维数组传参数_c语言数组

第一种形为二维数组 声明 void function(int a[m][n]);//函数声明 void function(int a[][n]);//不论多少维数组,第一维都可省略。...第二种形数组指针 (其实只是 声明定义 与第一种不同,其他一样) 声明 void function(int (*a)[n]); //不是(int *a[n])(指针数组) ,而是(int (*a)...第三种形为二级指针 声明 void function(int **a,int n);n表示第二维数组长度,即列宽 调用 function( (int **)a,int n);//实参不能为数组名!...n表示第二维数组长度,即列宽 //其他不被允许。由编译器的寻址方式决定。 总结 声明定义(分三种)。 二维数组数组指针,二级指针。...(都是指针) 调用(一对一,二对二) 数组指针,二维数组就写一级指针即 数组名.

2.7K10
您找到你想要的搜索结果了吗?
是的
没有找到

C语言:数组作为函数参数(数组元素做实参,数组名称做形

数组元素的值做实参 数组元素作为实参时,将数组元素的值传递给形,传递的方向是从实参向形的单向值传递。 例:编写函数求一维数组的最大值。...a:b; } 数组名称做形数组作为形时,虽然形式上还是数组,比如void sort(int arr[ ]),但是并不意味着真正建立了一个包含和实参数组大小相同的数组,在调用函数时也不对它分配存储单元...,只是用array[ ]这样的数组形式表示array是一维数组名,来接收实参传来的地址,因此array中的方括号的数值并无实际作用,编译器对数组维度进行忽略。...,向形参变量传递的是数组元素的值 用数组名做函数实参时,向形传递的是数组首元素的地址。...数组名作为函数实参传递时,函数定义处作为接收参数的数组类型形既可以指定长度也可以不指定长度。 数组元素作为函数实参传递时,数组元素类型必须与形参数据类型一致 。

2.6K20

c++:*与&, *&p, 指针传递,引用传递,数组

; } void main() { int b = 10; test(&b); cout << “b的值:” << b << “\n” << “b的地址:” << &b << “\n”; } 形int...10; test(b); cout << “b的值:” << b << “\n” << “b的地址:” << &b << “\n”; } 相当于变量的别名,函数内后续的任何改变都会影响原变量 数组...当要使用数组作为函数形时,因为一个数组不能使用另外一个数组初始化,也不能将一个数组赋值给另外一个数组,而在“1.1 非引用形”中提到要用实参的副本来初始化形,所以实参为数组时,不能直接传递给形...FindMax(int array[10]); 虽然不能直接传递数组,但是函数的形可以写成数组的形式。...此时,调用该函数是的实参数组被编译器自动转换为指针,也就是说,以上三种定义是等价的,其参数类型都是int*。 调用该函数时,直接将数组名称作为实参即可。

27320

C语言总结_数组与函数传练习题

字符串标准处理函数介绍(string.h)、指针和数组当做函数形,指针定义、函数返回指针、void类型定义指针、类型强制转换、常量声明、extern外边引用声明关键字。 1....指针可以当做数组使用,数组无法当做指针使用。 数组的名称: 就是首地址 在C语言里任何类型的指针(地址)是4个字节 2....函数参数: 指针与数组类型 函数的形: 指针类型与数组类型 示例代码: () #include //标准输入输出 #include //字符串处理头文件...函数形和返回值: 都是地址 (1)数组类型可以当做函数形。void func(char buff[]){} (2)数组类型不能当做函数返回值类型。...函数形如果要传入地址类型: 可以使用指针类型或者数组类型。

82720

C 语言】数组 ( 多维数组做函数形退化为指针过程 | int array -> int array -> int (*array) )

文章目录 一、多维数组做函数形退化为指针过程 1、使用 int array[2][3] 作函数参数 2、使用 int array[][3] 作函数参数 3、使用 int (*array)[3] 作函数参数...一、多维数组做函数形退化为指针过程 ---- 一维数组 作为 函数参数时 , 会退化为指针 ; 解决方案是 传入 数组首地址 和 数组元素个数 ; 如果 多维数组 作为 函数参数时 , 也存在退化问题...; 1、使用 int array[2][3] 作函数参数 使用 int array[2][3] 作为函数参数 , 可以完整打印出二维数组中的值 ; #include #include...i, j, array[i][j]); } } } /** * @brief main * @return */ int main() { // 声明一个 二维数组...array[2][3]; // 循环控制变量 int i = 0, j = 0; // 赋值时使用的索引值 int index = 0; // 为 二维数组

56110

C++】STL 容器 - vector 动态数组容器 ① ( vector 动态数组容器功能简介 | vector 动态数组默认无构造函数 )

文章目录 一、vector 动态数组 1、vector 动态数组简介 2、vector 动态数组容器功能简介 二、vector 动态数组默认无构造函数 1、vector 动态数组默认构造函数 2、代码示例...- vector 动态数组默认构造函数 一、vector 动态数组 1、vector 动态数组简介 C++ 语言 的 标准模板库 ( STL , Standard Template Library )...; 查找元素 : vector 提供了 find() 方法 , 可以对元素进行查找 ; 迭代器 : vector 提供了 前向 和 反向 迭代器 , 可以遍历容器中的元素 ; 二、vector 动态数组默认无构造函数...1、vector 动态数组默认构造函数 下面直接声明 vector 动态数组变量 , 可以在栈内存中创建 vector 容器对象 , 并使用该 动态数组 容器 ; vector 动态数组 容器 是使用...模板类 实现的 , vector 对象 的 默认构造形式 如下 : vector vecT; 上述默认构造形式 一旦声明 , 该 vector 容器就初始化成功 , 可以向其中插入数据 ; 存放普通数据类型的

37010

C 语言中关于通过形传递数组的长度计算的一些思考

本文链接:https://blog.csdn.net/solaraceboy/article/details/103187291 C 语言中关于通过形传递数组的长度计算的一些思考 一 背景 学习 C...在字符型的数组中我们可以使用 strlen() 来获取当前数组的长度,对于其他类型的数组,这个方法就不适用了。由于经常会遇到计算数组长度的问题,经过思考,考虑通过一个函数来实现数组长度的计算。...思路是这样的:通过形参将数组传递给长度计算函数,长度计算函数计算完成之后返回数组长度。但是在实际实践过程中遇到了问题,请继续往下看!...二 实现代码 根据以上构想,写了如下一段 demo: # include int main(int argc, char * argv[]) { int a[] = {2, 6,...length; } 执行结果: The length of this array is: 2 The length of this array is: 5 三 结果分析及总结 3.1 第一个结果,通过形传递给数组长度计算函数来计算数组长度

99720

C语言】变长数组,二分查找和数组之间自动替换的实现

前言 上一回我们了解了一维数组和二维数组的创建,初始化,和使用,这次我们拓展C语言的变长数组和查找的讲解。...一、C99中的变⻓数组C99标准之前,C⾔在创建数组的时候,数组⼤⼩的指定只能使⽤常量、常量表达式,或者如果我们初始化数据的话,可以省略数组⼤⼩。...一、变⻓数组的测试 遗憾的是在VS2022上,虽然⽀持⼤部分C99的语法,没有⽀持C99中的变⻓数组,没法测试;下⾯是我在gcc编译器上测试,(博主用的是小熊猫C++编译器,小熊猫实用的1的是gcc编译器...; n一开始默认为0;arr[]数组以为n为0;但C语言不允许定义大小为0的数组 表示数组"arr"的大小应为常量表达式。...在代码中,使用变量"n"来确定数组的大小,这在标准C中是不允许的。

7910
领券