数组作为函数参数传递
2014-04-21 17:09
225 查看
数组有两个特殊的性质。一是不能复制数组;二是使用数组名字时,数组会自动转化为指向其第一个元素的指针。由于数组不能复制,所以无法编写使用数组类型形参的函数,因为数组会被自动转化为指针。
一、一维数组
1.三种定义形式:
①编译器不会为任何数组形参指定指定长度。因此下面调用都是合法的:
编译没问题,运行时会出错;
②数组形参定义为引用类型。非引用类型传递时,数组会悄悄的转为指针,即初始化为相应实参的副本,形参复制的是这个指针的值,而非数组元素本身。然而,通过形参指针做的任何改变都在修改数组元素本身。
定义为数组的引用时,将不会转换为指针,而是传递数组的引用本身,数组大小成为形参和实参类型的一部分,编译器会检查数组实参的大小和形参是否匹配。
二、二维数组
两种定义
一、一维数组
1.三种定义形式:
void printvalues(int *); void printvalues(int []); void printvalues(int [10]);
void printvalues(int a[],int size);//由于编译器会忽略第一维数组的长度,所以将其长度作为第二个形参
①编译器不会为任何数组形参指定指定长度。因此下面调用都是合法的:
int main() { int i=0,j[2]={0,1}; printvalues(&i); //ok printvalues(j); //ok }
编译没问题,运行时会出错;
②数组形参定义为引用类型。非引用类型传递时,数组会悄悄的转为指针,即初始化为相应实参的副本,形参复制的是这个指针的值,而非数组元素本身。然而,通过形参指针做的任何改变都在修改数组元素本身。
定义为数组的引用时,将不会转换为指针,而是传递数组的引用本身,数组大小成为形参和实参类型的一部分,编译器会检查数组实参的大小和形参是否匹配。
void printvalues(int (&arr)[10]) int main() { int i=0,j[2]={0,1},k[10]={0}; printvalues(&i); //error printvalues(j); //error printvalues(k);//ok }
二、二维数组
两种定义
void printvalues(int (*matrix)[10],int rowsize); void printvalues(int matrix[][10],int rowsize);//因为和一维数组一样编译器会忽略第一维的长度,因此最好把第一维的长度作为第二个形参
相关文章推荐
- C语言中,数组名作为参数传递给函数时,退化为指针
- 数组作为函数参数传递
- 数组作为函数的参数传递
- C语言中,数组名作为参数传递给函数时,退化为指针
- c++中关于数组作为函数参数并传递数组元素个数的几种有效方法的讨论
- 数组作为函数参数传递时
- 关于将数组作为参数传递给函数的简单使用
- 一维数组和二位数组作为函数参数进行传递的方式
- 利用数组名作为函数参数传递排序和用指针进行排序
- 数组作为函数参数进行传递
- 数组名作为函数的参数传递给函数
- C 语言的数组作为参数在函数之间的传递
- C语言中数组名作为参数进行函数传递
- 实现数组作为函数参数传递,切返回值也是数组
- 数组作为函数参数时的传递问题
- string和数组作为参数传递给函数
- go数组作为函数参数传递
- 数组作为函数参数传递
- 怎样把数组作为参数传递给函数
- C语言中,数组名作为参数传递给函数时,退化为指针