【问题标题】:When you pass an array to a function, does it allocate memory not for the array but for the address of the first element of the array?当您将数组传递给函数时,它是否不是为数组分配内存,而是为数组第一个元素的地址分配内存?
【发布时间】:2022-07-21 20:45:55
【问题描述】:

当你将数组传递给函数时,它是否不是为数组分配内存,而是为数组第一个元素的地址分配内存?

【问题讨论】:

  • 您传递的数组衰减为指向其第一个元素的指针,所以是的。即使函数是 func(char arr[10]) 传递了一个指针,并且函数等效于 func(char *arr)
  • 在声明时分配数组。在将数组作为函数参数传递时,没有额外的内存分配,正如@weather vane 所解释的那样,没有传递数组对象,只有一个指向第一个元素的指针。

标签: c


【解决方案1】:

所有函数参数都在堆栈上传递(这是为此目的保留的内存空间)。编译器优化可能会通过将值保存在寄存器中来避免堆栈使用,但您应该在参数的大小分配给堆栈的基础上进行工作。

请注意,在 C 中,参数要么是整数值(int、char 等),要么是指针。对象/数组只是指向第一个元素/基的指针(或指向指针等的指针)。

【讨论】:

  • 结构是按值传递的。只有数组衰减为指针。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
  • 2018-05-05
  • 2021-11-03
  • 1970-01-01
相关资源
最近更新 更多