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

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

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

2.7K10

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

数组元素的值实参 数组元素作为实参时,将数组元素的值传递给,传递的方向是从实参向的单向值传递。 例:编写函数求一维数组的最大值。...a:b; } 数组名称做数组作为时,虽然形式上还是数组,比如void sort(int arr[ ]),但是并不意味着真正建立了一个包含和实参数组大小相同的数组,在调用函数时也不对它分配存储单元...]); } return 0; } void fun(int a[]){ for(int i=0;i<=9;i++) a[i]=a[i]+10; } 注意: 用数组元素实参时...,向变量传递的是数组元素的值 用数组函数实参时,向传递的是数组首元素的地址。...数组名作为函数实参传递时,函数定义处作为接收参数的数组类型既可以指定长度也可以不指定长度。 数组元素作为函数实参传递时,数组元素类型必须与参数据类型一致 。

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

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

文章目录 一、多维数组函数退化为指针过程 1、使用 int array[2][3] 作函数参数 2、使用 int array[][3] 作函数参数 3、使用 int (*array)[3] 作函数参数...一、多维数组函数退化为指针过程 ---- 一维数组 作为 函数参数时 , 会退化为指针 ; 解决方案是 传入 数组首地址 和 数组元素个数 ; 如果 多维数组 作为 函数参数时 , 也存在退化问题... #include void print_array(int array[2][3]) { // 循环控制变量 int i = 0, j =...int array[2][3]; // 循环控制变量 int i = 0, j = 0; // 赋值时使用的索引值 int index = 0;...int array[2][3]; // 循环控制变量 int i = 0, j = 0; // 赋值时使用的索引值 int index = 0;

55510

C语言-指针作为函数类型

前言 C语言函数里最常用就是指针传和返回地址,特别是字符串处理中,经常需要封装各种功能函数完成数据处理,并且C语言标准库里也提供了string.h 头文件,里面包含了很多字符串处理函数;这些函数的参数和返回值几乎都是指针类型...c=*a; *a=*b; *b=c; } //return语句只能返回一个值 //如果函数想返回多个值,可以使用指针()实现。...注意: 从大到小或者小到大排序可以通过函数区分。...='\0'){} return str-p-1; } /* 函数功能: 实现字符串排序.支持从小到大或者大到小 函数: char *p 将要排序的字符串 char flag 选择排序方式...0 局部变量默认值是随机值(系统没有赋值) 静态变量默认值是0 */

1.4K30

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

shell数组变量赋值_可以是常量变量或表达式

bash 支持一维数组(不支持多维数组),并且没有限定数组的大小。 类似于 C 语言数组元素的下标由 0 开始编号。...定义数组的一般 式为: 【示例】定义数组:array_name=(value0 value1 value2 value3) 数组的值类型任意,个数不限 可以不使用连续的下标,而且下标的范围没有限制...:array_name=([0]=value0 [3]=value3 [5]=value5) 【示例】定义数组 2.读取数组 读取数组元素值的一般格式是:{数组名[下标]} @或*获取数组中的所有元素...[索引]} 【示例】读取数组: 【示例】读取数组所有元素 【示例】读取数组长度 【示例】读取数组中指定元素的字符长度 3.数组拼接 所谓的数组拼接就是将两个数组连接成一个数组。...【示例】数组拼接 4.数组删除 删除数组可以删除数组中指定元素,也可以删除整个数组

60010

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

表示&p指向地址内存空间的值,在这里表示a的地址 *&p = (&p) = p p是指针,&p为p的地址 (取包有内容p的盒子的编号) 再进行解引用(拆开盒子),所以得到 *&p = p 指针传递 出现在函数定义中...”; } void main() { int b = 10; test(&b); cout << “b的值:” << b << “\n” << “b的地址:” << &b << “\n”; } ...,函数内后续的任何改变都会影响原变量 数组 当要使用数组作为函数时,因为一个数组不能使用另外一个数组初始化,也不能将一个数组赋值给另外一个数组,而在“1.1 非引用”中提到要用实参的副本来初始化形...,所以实参为数组时,不能直接传递给。...FindMax(int array[10]); 虽然不能直接传递数组,但是函数的可以写成数组的形式。

25220

C 语言C 项目开发代码规范 ( 参合法性判断 | 函数返回值局部变量 | 函数中不用全局变量 | 函数中使用局部变量接收 | 函数返回值 | 作返回值 | 返回值处理 )

文章目录 一、C 项目开发代码规范 一、C 项目开发代码规范 ---- 上一篇博客 【C 语言】字符串模型 ( 键值对模型 ) 中 , 完成了字符串的 键值对 查找功能 , 代码不太规范 ; C 项目开发代码规范..., 尽量 不使用全局变量 , 一旦涉及到全局变量 , 该函数肯定是线程不安全的 ; 参考 【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | strncat 函数...) 博客 , 该博客中就使用了全局变量存放函数结果 , 不支持多线程访问 ; 函数中使用局部变量接收 : 函数中的指针变量 , 不要直接使用 , 如果涉及到修改指针指向的操作 , 建议 创建 函数...函数 的值 , 使用指针变量接收 函数 char *main_str_tmp = main_str; char *sub_str_tmp = sub_str; } 函数返回值...返回值处理 : 返回值不要直接修改 , 先定义临时局部变量保存返回值 , 最后执行完毕 , 再将返回值 通过 间接赋值 赋值给 中的 返回值指针 指向的 内存地址 ; // 保存非空字符串长度

1.4K20

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

本文链接:https://blog.csdn.net/solaraceboy/article/details/103187291 C 语言中关于通过传递数组的长度计算的一些思考 一 背景 学习 C...语言的过程中,计算数组的长度经常会碰到。...思路是这样的:通过参将数组传递给长度计算函数,长度计算函数计算完成之后返回数组长度。但是在实际实践过程中遇到了问题,请继续往下看!...length; } 执行结果: The length of this array is: 2 The length of this array is: 5 三 结果分析及总结 3.1 第一个结果,通过传递给数组长度计算函数来计算数组长度...sizoef a 的结果是指针变量 a 占内存的大小,一般在 64 位机上是8个字节。a[0] 是 int 类型,sizeof a[0] 是4个字节,结果是2。

98920

c语言函数指针的用法_函数指针作为

文章目录 导引 指针函数 指针函数定义 指针函数的三种写法 代码示例 函数指针 定义 代码示例 函数指针和指针函数区别 定义不同 写法不同 用法不同 导引 函数指针和指针函数,在学习 C 语言的时候遇到这两个东西简直头疼...,当然还有更头疼的,比如什么函数指针函数、指针函数指针、数组指针、指针数组、函数指针数组等等,描述越长其定义就越复杂,当然理解起来就越难,特别是刚开始学习这门语言的童鞋,估计碰到这些东西就已经要崩溃了,...函数指针 定义 函数指针,其本质是一个指针变量,该指针指向这个函数。总结来说,函数指针就是指向函数的指针。

57820

C++string类作为传值,实参与的变化

C++问题: 使用函数调用,排序string字符串数组从小到大,没有使用指针和引用,为什么实参也会改变?...{ if(s[j + 1] < s[j]) { temp = s[j]; s[j] = s[j+1]; s[j+1] = temp; } } } } 改变的值是实参的值,也就是说实参对传的是地址...,此时参与实参为同一个地址,在改变形也会改变,所以string类与数组时一样,string类的是一个指针,接受的是字符串首个字符地址,其中数组类型在存贮数据是连续线性存贮的,而string...类在存贮字符串数组则是存贮每个字符串首字母的地址,比如a[3] = {"I","love", "c++"}中a[2]为第一个字符串的地址,也就是love种l的地址,这样一来string类字符串数组的每一个字符串长度没有限制...这是关于C++中string类比C语言数组类型的改进。

1.2K20

请教关于C语言和实参存储单元的问题?

首先我们限定一下问题,只限于cdecl的调用约定,函数没有被编译器inline的优化(C++才有inline,但是C编译器也可能自己把函数调用优化掉)。...除了cdecl以外,C中其他常用的调用约定包括stdcall和fastcall,C++中还有一个thiscall(用于调用类的成员函数)。fastcall会使用寄存器来传递一部分参数。...而且C语言也不支持传递引用作为参数。 纠结的在于传递数组作为参数这种情况,对编译器来说,实际上的参数是个指针,但是从代码形式上来看好像是个数组……这个我也不知道该怎么算,这简直是个哲学问题。...如果从定义的角度上看,这时候参数类型是数组,那姑且算是你同学对吧,但是是有争议的。 不过,有另一个很好的理由可以选D: 如果传递的实参是个常量,这个常量并不会占用额外的空间。...这个时候显然不是“实参和各占用独立的存储单元”。

1.2K30

C语言函数参数详解】——实际参数(实参)&形式参数(

在调用有函数时,函数名后面括号中的参数称为“实参”,是我们真实传给函数的参数,实参可以是:常量、变量、表达式、函数等。...: 我们如果在函数外部使用函数,这是不可行的。...2.在函数调用过程中才实例化(分配内存单元) 函数调用之前,还未创建 函数调用过程中,才被实例化 函数调用结束,生命周期结束,被销毁 三.参与实参的关系 了解了什么是函数的和实参,...他们的关系是: 实例化之后其实相当于实参的一份临时拷贝。 这里我们对函数的实参和进行分析: 我们来尝试写一个函数交换两个整形变量的内容。...这是因为在函数调用时,x,y是实参num1,num2的一份临时拷贝,和实参并没有建立真正意义上的联系,x,y是两个独立的变量,和实参num1,num2分别占用不同的内存空间,在这里,和实参只是数值相同罢了

85110

C 语言】字符串模型 ( 字符串翻转模型 | 抽象成业务函数 | 返回值 | 函数返回值 | 函数处理 | 指针判空 )

文章目录 一、字符串翻转模型 业务函数 二、完整代码示例 一、字符串翻转模型 业务函数 ---- 将上一篇博客 【C 语言】字符串模型 ( 字符串翻转模型 ) 的代码 , 主要业务逻辑 , 抽象成函数...; 字符串翻转模型 业务函数 要点 : 返回值 : 函数的返回值 , 一般使用 函数 间接赋值 进行返回 ; 下面的代码中 char *str 是返回值 ; int inverse(char *...str) 函数返回值 : 函数的返回值 , 反映的是函数的执行结果状态 , 返回 0 执行成功 , 返回 -1 执行失败 ; 函数处理 : 在 函数中 , 如果涉及到修改 指针变量 , 一般不直接使用..., 创建一个临时局部变量 , 接收 , 然后再执行相关操作 ; // 创建临时变量接收 函数 , 不要直接改变形的函数指向 char *str_tmp = str; 指针判空...函数 , 不要直接改变形的函数指向 char *str_tmp = str; // 判断传入的字符串指针是否为空 if(str_tmp == NULL) {

89810
领券