C语言将数组作为函数参数
如果需要将一个数组当作实参传入函数,则应把对应的形参声明成下面的形式:
类型 名称[ ]
因为,当把数组名作为函数实参时,它会自动被转换为指针。所以上面的声明等同于下面的声明:
类型 *名称
当使用数组来声明函数参数时,方括号 [] 内的任何常量表达式都会被忽略。在函数块内,数组参数名是一个指针变量,并且数组的值可以在该函数内被修改。例 1 中的函数 addArray()将两个数组中对应索引元素的值相加。
【例1】函数 addArray()
// addArray() 将第二个数组中每个元素的值加到第一个数组对应元素上 //(例如, array1 += array2 ) // 参数:两个float类型的数组,以及它们共同的长度 // 返回值:无 void addArray( register float a1[ ], register const float a2[ ], int len ) register float *end = a1 + len; for ( ; a1 end; ++a1, ++a2 ) *a1 += *a2; }
对于函数中的数组参数使用另一种表示法,上述函数 addArray()可等效为以下形式:
void addArray( register float *a1, register const float *a2, int len ) { /* 函数块内容与前述一样 */ }
使用方括号 [] 声明函数数组参数的一个优点就是可读性好,它可以显著地标识出函数将该参数作为指向数组的指针,而不是一个独立的 float 变量。在参数声明时,数组风格的表示法还有两个特点:
(1) 在参数声明时(也只有在该情况下),C99 允许将类型限定符 const、volatile 和 restrict 放在方括号内。这个功能允许声明具有限定符指针类型的参数。
(2) 而且,在 C99 中,也可以将存储类修饰符 static 连带整数常量表达式一起放在方括号内。这种方法表示,在函数调用的时数组内元素数量至少等于该常量表达式。
下面一个示例展示了上述这些特点:
int func( long array[const static 5] ) { /* ... */ }
在这里所定义的函数中,参数 array 是一个指向 long 类型的常量指针,所以不能被修改。它指向一个至少有 5 个元素的数组。
C99 同时允许将数组参数声明成可变长度的数组。方法是将一个非常量的、且为正数的整数表达式放在方括号之间。在这种情况下,数组参数仍然是指向第一个数组元素的指针。不同之处在于,数组元素本身也允许长度可变。
在例 2 中,函数 maximum()的第 3 个参数是一个二维数组,其长度可变。
【例2】函数 maximum()
// 函数 maximum() 获得double类型二维数组中的最大值 // 参数:行数、列数、二维数组 // 返回值:最大元素的值 double maximum( int nrows, int ncols, double matrix[nrows][ncols] ) double max = matrix[0][0]; for ( int r = 0; r nrows; ++r ) for ( int c = 0; c ncols; ++c ) if ( max matrix[r][c] ) max = matrix[r][c]; return max; }参数 matrix 是一个指针,它指向一个具有 ncols 个元素的数组。
21657.html
相关文章
- C语言数组初始化
- C语言之数组(数组赋值的三种形式)
- C语言数组 一维数组篇
- C语言如何计算数组的长度
- 蓝桥杯 历届试题 小朋友排队(树型数组 C语言)
- C语言通过指针引用数组【C语言学习笔记】
- C语言结构体数组及结构体指针例题
- 初学C语言的福音-初识关键字和指针
- 初识C语言(下):基本了解C语言的基础知识,对C语言有一个大概的认识。
- [C语言]数组和字符串
- 【C语言】自定义类型(结构体、位段、枚举、联合体)
- Linux C语言字符串拼接技巧(linuxc字符串合并)
- 数组越界及其避免方法,C语言数组越界详解
- 数组的定义,初始化和使用,C语言数组详解
- 二维数组的定义、初始化和输出,C语言二维数组详解
- 初始化数组,C语言中数组的初始化
- C语言isgraph()函数:判断一个字符是否是图形字符
- 基于C语言环境的Linux开发环境搭建(clinuxide)
- Mongodb C语言实现自增功能:简单高效的数据自增方式(mongodbc自增)
- C语言开发MySQL用户注册系统(c mysql注册)
- C语言连接Oracle数据库视图编程实践(c 连oracle视图)
- 数据库利用C语言开发Oracle数据库应用(C语言开发oracle)
- 掌握C语言,Oracle数据录入技巧(c oracle录入)
- C语言小程序如何判断三角型类型
- C语言二维数组的处理实例