gpt4 book ai didi

c - 按值将数组传递给函数

转载 作者:行者123 更新时间:2023-12-01 13:49:48 26 4
gpt4 key购买 nike

我指的是 Paul S R Chisholm 的书“C Programming Just the FAQs”。根据作者的说法,“因为数组是按值传递的,所以会制作数组的精确副本并将其放在堆栈上。然后被调用的函数会收到数组的这个副本并可以打印它。因为传递给 byval_func 的数组()是原数组的拷贝,在byval_func()函数内修改数组对原数组没有影响”

但我认为如果我们按照他的示例传递数组,即使在调用部分也会改变数组。我什至尝试过,结果符合我的预期。如果我错了,请纠正我。

下面是课本上给出的例子。

void byval_func(int[]);

void main(void)
{
int x[10];
int y;
/* Set up the integer array. */
for (y=0; y<10; y++)
x[y] = y;
/* Call byval_func(), passing the x array by value. */
byval_func(x);
}

/* The byval_function receives an integer array by value. */
void byval_func(int i[])
{
int y;
/* Print the contents of the integer array. */
for (y=0; y<10; y++)
printf(“%d\n”, i[y]);
}

最佳答案

听起来那本书的作者不懂 C。

  • 数组不是“按值传递”的,因为 C 中没有数组值。数组的值实际上是指向其第一个元素的指针。
  • 这意味着函数可以修改调用者的数组(永远不会复制数组本身)。
  • void main 是错误的。 main 必须返回 int

经验法则:如果一本 C 书包含 void main,则它可能很糟糕。

关于c - 按值将数组传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32811457/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com