C语言中,数组名作为函数参数,属于什么传递,为什么?

C语言中,数组名作为函数参数,属于什么传递,为什么?,第1张

C语言中,数组名作为函数参数,属于数组参数传递。在VB60中,允许使用数组作为实参传递到子过程的形参中,数组传递必须采用地址传递的方式来传递参数。

数组型变量名本身只是该数组所占存储空间的首地址,函数调用时,系统不会为形参分配数组存储空间,而是仅仅分配一个存放数组地址(第一个元素地址)的存储空间,此后,将实参数组的首地址传递给形参变量。

扩展资料:

数组参数在传递时应注意以下两个方面:

1、 在实参和形参列表中只写数组名,忽略维数的定义,但圆括号不能省,当数组作为参数传递时,系统将实参数组的起始地址传给过程,使形参数组也具有与实参数组相同的起始地址,若参数是多维数组,每维以逗号分隔。

2、被调过程可分别通过Lbound和Ubound函数确定实参数组的下界和上界。

-参数传递

在C语言中可以用二维数组作为实参或者形参。

1、函数中用二维数组作为形参,函数声明中可以指定所有维数的大小,也可以省略第1维的维数如: 

     void f(int array[3][10]); //正确

     void f(int array[][10]);  //正确

上面的两种二维数组形参表示都是正确的。

2、函数中用二维数组作为形参,不能把第2维或者更高维的大小省略,如下面的定义是不合法的: 

     void f(int array[][]); //错误

     因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多少列,不能只指定一维而不指定第二维,下面写法是错误的:  

    void f(int array[3][]);  //错误

 3、二维数组作为实参传递时,必须保证实参第2维的维数与形参第2维的维数相同,因为必须要保证形参和实参的数据类型一致。比如定义如下函数:

void f(int array[][10]);

可以将如下数组传递给函数f。

int a[2][10] = {1,2,3,4}; 

int b[4][10] = {1};

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/12155064.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存