用数组作为函数的参数

来源:互联网 发布:淘宝联盟能使用红包吗 编辑:程序博客网 时间:2024/06/06 19:50
数组作为函数的参数

数组名作为函数的形参

如果函数的实参是数组名,则形参肯定也为数组名或者指针变量。且实参数组和形参数组类型必须一致。函数实参是数组名,即是把数组首元素的地址传递给形参。数组名作函数实参时,改变形参数组元素的值将同时改变实参数组元素的值。
实际上,声明形参数组并不意味着真正建立一个包含若干元素的数组,在调用函数时也不对它分配存储单元,只是用array[]这样的形式表示array是一维数组名,以接收实参传来的地址。因此array[]中方括号内的数值并无实际作用,编译系统对一维数组方括号内的内容不予处理。形参一维数组的声明中可以写元素个数,也可以不写。

void BubbleSort(int num[])//升序排列{for(int i = 0; i < N - 1;i++){for(int j = i + 1; j < N ;j++){if(num[i] > num[j]){int temp = num[i];num[i] = num[j];num[j] = temp;}}}}
上面的写法不能得知实参数组含有的元素大小,若要传递数组的大小,可以在后面再添加个形参变量,表示数组的个数。
void BubbleSort(int num[],int n)
下面这个三个函数声明效果是一样的

void fun1(char *a,int length);  //数组名void fun2(char a[],int length);  //数组名void fun3(char a[10],int length);   //数据名

fun3参数a[10]中的10有跟没有都一样的,编译器都会忽略掉

多维数组名作函数形参

如果用二维数组名作为实参和形参,在对形参数组声明时,必须指定第二维(即列)的大小且应与实参的第二维的大小相同第一维的大小可以指定,也可以不指定。如:
 
 int array[3][10];  //形参数组的两个维都指定    int array[][10];  //第一维大小省略  二者都合法而且等价,但是不能把第二维的大小省略。

下面的形参数组写法不合法:
int array[][];  //不能确定数组的每一行有多少列元素 int array[3][];  //不指定列数就无法确定数组的结构

在第二维大小相同的前提下,形参数组的第一维可以与实参数组不同。例如,实参数组定义为:int score[5][10];
而形参数组可以声明为:int array[3][10];   int array[8][10];  //列数与实参数组相同,行数不同 

形参声明为int array[3][10];   int array[8][10];    int array[ ][10];这三种是等价的

形参二维数组与实参二维数组必须由相同类型和大小的一维数组组成的,实参数组名score代表其首元素(即第一行)的起始地址,系统不检查第一维的大小。







0 0
原创粉丝点击