
正文
c语言中函数形参用数组名 c语言规定数组名做实参时和形参之间的数据传输方式
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
以数组名作为作为函数参数的具体含义??
以数组名作为作为函数参数的具体含义如下,
(1)用数组元素作
实参
时,只要数组类型和函数的
形参
变量的类型一致,那么作为下标变量的数组元素的类型也和函数形参变量的类型是一致的。因此,并不要求函数的形参也是下标变量。换句话说,对数组元素的处理是按普通变量对待的。用数组名作函数参数时,则要求形参和相应的实参都必须是类型相同的数组,都必须有明确的数组说明。当形参和实参两者类型不一致时,机会发生错误。
(2)在用数组名做函数参数时,不是进行值的传递,即不是把实参数组的每一个元素的值都赋予形参数组的各个元素。用普通变量或下标变量作函数参数时,形参变量和实参变量都是由编译系统分配的两个不同的内存单元。在函数调用时进行的值传递是把实参变量的值赋予形参变量。因为实际上形参数组并不存在,编译系统不为形参数组分配内存。那么,数据的传递是如何实现的?因为数组名就是数组的首地址。因此用数组名做函数参数时所进行的传递实际上是地址的传递,也就是把实参数组的首地址赋予形参数组名。形参数组名取得该首地址后,也就等于有了具体的地址。实际上是形参数组和实参数组为同一数组,共同使用一段内存空间。
此外,需注意以下几点,
(1)如果形参是数组形式,则实参必须是实际的数组名,如果实参是数组名,则形参可以是同样维数的数组名或指针。
(2)要在主调函数和被调函数中分别定义数组。
(3)实参数组和形参数组必须类型相同,形参数组可以不指明长度。
(4)在C语言中,数组名除作为变量的标识符之外,数组名还代表了该数组在内存中的起始地址,因此,当数组名作函数参数时,实参与形参之间不是"值传递",而是"地址传递",实参数组名将该数组的起始地址传递给形参数组,两个数组共享一段内存单元,编译系统不再为形参数组分配存储单元。
相关问答
Q1: c语言:利用数组名作函数参数,实现双向数据传递
int x = 2
int y = F(x)
函数F里如果出现x=3,那么回归后主程序里x还是2,因为递给函数的只是个拷贝
如果
int x[] = {2,3}
int y = F(x)
这时递进去的是数组首地址c语言中函数形参用数组名,所以在函数里如果出现x[0]=1,那么主程序里的x也会变成{1,3}, 因为虽然函数拿到的x是一个拷贝c语言中函数形参用数组名,但因为它是地址,所以直接改变该地址的数据还是会有影响
Q2: c语言中数组名作为函数参数
要将数组长度作为一个参数传给average函数c语言中函数形参用数组名,不能在average函数内部通过int arrLen = sizeof(a) / 4;来计算数组长度。因为float average(float a[10])就相当于float average(float *a) c语言中函数形参用数组名,所以sizeof(a)恒等于4c语言中函数形参用数组名,sizeof(a) / 4恒等于1。
应该这样c语言中函数形参用数组名:
float average(float a[10],int arrLen) {
float sumSco = 0;
for (int i = 0; i arrLen; i++)
{
sumSco += a[i];
}
return sumSco / arrLen;
}
Q3: c语言函数的形参为指针变量时,对应的实参可以是数组名。怎么理解呀
举例:
void f(int *p)
{
}
int arr[]={1,2,3};
因为函数f的形参是一个类型为int的指针变量,所以调用f时,可以将数组名arr作为实参传给形参p。即可以这样调用:f(arr);
Q4: C语言中数组作为函数参数
C中数组名代表该数组的首地址,
char
s[]="abc";
s代表的就是‘a’在内存中的地址
以地址作参数
,实参和形参同时改变
关于c语言中函数形参用数组名和c语言规定数组名做实参时和形参之间的数据传输方式的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







