函数传数组传的是地址吗(函数的传值与传址)
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;
}
则数组中的值未被改变。
望采纳。