函数传数组传的是地址吗(函数的传值与传址)

http://www.itjxue.com  2023-01-27 15:32  来源:未知  点击次数: 

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

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

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

扩展资料:

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

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

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

参考资料来源:百度百科-参数传递

数组名作为函数的参数属于什么传递为什么

属于地址传递。

因为数组名的本质是一个地址常量。

字符串是字符数组,我们在scanf()中,输入字符串时,不需要用取地址符,因为字符串变量名本身是地址。

如:

char name[20];

scanf("%s",name);

即可。

c语言中交换两个数据,为什么数组是地址传递捏

如果是不是传地址,那会在函数中重新定义两个变量分别等于两个参数的值,对新定义的两个变量进行操作。和原来的两个变量无关。

如果是传地址,那就是把两个数的地址传到函数中,对两个地址中的内容进行操作。所以会改变两个数的值。

一般如果要通过函数来改变参数的值,C都是要用传地址的,C++还可以用引用。比如scanf()函数,因为要把输入的值传递给参数,所以要加取地址符号.而printf就不用

为什么数组作为函数的参数时,传递的不是每一个数组元素的值,而是数组的首地址?

这里有两这两个原因可以让你明白c语言数组传址不传值。

一、假如有一个数组有1000个元素,如果传值那在函数里是不是要再开辟一个能存1千个元素的数组,浪费内存,浪费时间不?这是没有必要的因为内存里已经有一个地方有1000个元素数据,传址就可以解决这个问题。

二、假设你定义的函数要对传过来的数组值进行修改,传值过来可以修改吗?答案是不可以,他们的内存空间不一样,同样传值可以跟方便的解决。

另外如果你不想函数修改数组的值也可以用const修饰,不让修改,只读。如int sum(const int *num);

在C语言中,数组作为参数,是怎样在函数之间传递的啊??

数组作为参数是按地址传递的

数组名就是数组的首地址。因此在数组名作函数参数时所进行的传送只是地址的传送, 也就是说把实参数组的首地址赋予形参数组名。形参数组名取得该首地址之后,也就等于有了实在的数组。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。

传给函数的数组,是传数组元素的值,还是数组元素的地址值?

以C语言为例:

定义 int a[2];

这里的a既是数组名,也是数组首地址,也就是说相当于const int *a = a[0];

以交换函数为例:

void swap(int a[])

{

int temp;

? temp = a[0];

a[0] = a[1];

a[1] = temp;

}

传入语句:swap(a);

此处传进来的是地址,数组中的值被改变了。

如果传入值:

void swap(int a,int b)

{

int temp;

? temp = a;

? a = b;

? b = temp;

}

则数组中的值未被改变。

望采纳。

(责任编辑:IT教学网)

更多

推荐Flash教程文章