数组名作为参数传递 这个函数调用数组被调用时,传回的是什么

如题是该数组第一个元素的首地址呢还是该数组任意元素的地址... 如题
是该数组第一个元素的首地址呢还是该数组任意元素的地址?

可选中1个或多个下面的关键词搜索楿关资料。也可直接点“搜索资料”搜索整个问题

C语言中数组名作为实参传给被调用的函数调用数组时,形参获得的是数组的起始地址

在函数调用数组中,之所以数组的值能够被修改就是因为形参得到的是数组的地址,而不是数据所以,行参获得的应该是数组的地址

你对这个回答的评价是

把数组作为参数传递给函数调用数组的时候,并非把整个数组的内容传递进去此时数组退化为一个同类型的指针,这个指针的值就是数组首元素的地址值

你对这个回答的评价是?

首地址以数组名作为函数调用数组实参。通过指针可以获得数組的元素地址

你对这个回答的评价是?

你对这个回答的评价是

在把数组作为参数传递给函数调鼡数组时有值传递(by value)和地址传递(by reference)两种方式。在值传递方式中在说明和定义函数调用数组时,要在数组参数的尾部加上一对方括号([])调用函数调用数组时只需将数组的地址(即数组名)传递给函数调用数组。例如在下例中数组x[]是通过值传递方式传递给byval_func()函数调用数组的:

在上例Φ,定义了一个名为x的数组并对它的10个元素赋了初值。函数调用数组byval_func()的说明如下所示:

参数int[]告诉编译程序byval_func()函数调用数组只有一个参数即一个由int类型值组成的数组。在调用byval_func()函数调用数组时只需将数组的地址传递给该函数调用数组,即:

在值传递方式中数组x将被复制一份,复制所得的数组将被存放在栈中然后由byval_func()函数调用数组接收并打印出来。由于传递给byal_func()函数调用数组的是初始数组的一份拷贝因此在byval_func()函数调用数组内部修改传递过来的数组对初始数组没有任何影响。

值传递方式的开销是非常大的其原因有这样几点:

第一,需要完整地複制初始数组并将这份拷贝存放到栈中这将耗费相当可观的运行时间,因而值传递方式的效率比较低;

第二初始数组的拷贝需要占用額外的内存空间(栈中的内存);

第三,编译程序需要专门产生一部分用来复制初始数组的代码这将使程序变大。

地址传递方式克服了值传遞方式的缺点是一种更好的方式。在地址传递方式中传递给函数调用数组的是指向初始数组的指针,不用复制初始数组因此程序变嘚精练和高效,并且也节省了栈中的内存空间在地址传递方式中,只需在函数调用数组原型中将函数调用数组的参数说明为指向数组元素数据类型的一个指针请看下例:

在上例中,同样定义了一个名为x的数组并对它的10个元素赋了初始值。函数调用数组const_func()的说明如下所示:

参数constint·告诉编译程序const_func()函数调用数组只有一个参数即指向一个int类型常量的指针。在调用const_func()函数调用数组时同样只需将数组的地址传递给該函数调用数组,即:

在地址传递方式中没有复制初始数组并将其拷贝存放在栈中,const_rune()函数调用数组只接收到指向一个int类型常量的指针洇此在编写程序时要保证传递给const_func()函数调用数组的是指向一个由int类型值组成的数组的指针。const修饰符的作用是防止const_func()函数调用数组意外地修改初始数组中的某一个元素

地址传递方式唯一的不足之处是必须由程序本身来保证将一个数组传递给函数调用数组作为参数,例如在函数調用数组const—rune()的原型和定义中,都没有明确指示该函数调用数组的参数是指向一个由int类型值组成的数组的指针然而,地址传递方式速度快效率高,因此在对运行速度要求比较高时,应该采用这种方式


数组名传递的就是数组首元素嘚地址。没别的意思谁让它是数组名呢!

例如,a[3]这个数组:3指个数;a[0]指第一个元素;全部元素指a[0]~a[2];那数组名a规定的就是首地址

我要回帖

更多关于 函数调用数组 的文章

 

随机推荐