函数调用时用数组名作为函数参数的问题

”实参与其对应的形参分别占用不同的存储空间“
这一句话为什么是错的?

该回答引用于gpt与OKX安生共同编写:
  • 该回答引用于gpt与OKX安生共同编写:

这句话描述的并不是完全错误的,但也不是完全正确的。在C语言中,数组名作为函数参数传递时,实参和形参都是指针类型(即数组首元素的地址)。因此,实参和形参所占用的存储空间是不同的,但它们指向的是同一个内存区域。

具体来说,当使用数组名作为函数参数时,实参将会被自动转换为指向数组首元素的指针,然后传递给形参。在函数内部,形参实际上是指向实参所代表的数组首元素的指针。因此,在函数内部可以通过形参来访问和修改实参所代表的数组元素。

总之,虽然实参和形参分别占用不同的存储空间,但它们都指向同一个数组,因此对形参的操作会影响到实参所代表的数组元素。

数组是个指针,形参传递的只是一个指针,数组空间是只有一个的
只有指针占用的空间是分开的

数组是传指针
如果要是每次数组都拷贝一份,那么效率太低了。
也白白占用了太多的内存
C语言连数组越界都懒得检查的语言,你觉得会”占用不同的存储空间“么

C函数的所有参数均以“传值调用”方式进行传递,这意味着函数将获得参数值的一份拷贝。这样,函数可以放心修改这个拷贝值,而不必担心会修改调用程序实际传递给它的参数。

以下内容经过作者本人思考并和GPT给出的答案整合,博主可以参考以下


这句话是错的,因为实参与其对应的形参并不一定占用不同的存储空间。在函数调用中,实参和形参之间的传递可以分为值传递和引用传递两种方式。

在值传递中,实参的值被复制到形参中,它们占用的是不同的存储空间。在这种情况下,实参和形参占用的存储空间是不同的。

在引用传递中,实参的地址被传递到形参中,它们指向同一块存储空间。在这种情况下,实参和形参占用的存储空间是相同的。

因此,实参和形参占用的存储空间是否相同取决于函数调用时采用的传递方式,而不是固定的。