gpt4 book ai didi

c - 数组 b[] 的值如何用另一个函数的另一个数组 a[] 值填充?

转载 作者:行者123 更新时间:2023-11-30 20:29:21 25 4
gpt4 key购买 nike

我在互联网上找到了这段代码。我困惑了 1 个小时。我发现奇怪的是数组 b[] 位于具有本地作用域的 met2() 函数内。还有另一个数组 a[] 位于 met1() 函数内部,具有本地作用域。但是a[]的值如何转移到b[]数组。最重要的是,这两个函数都没有返回任何值。这太令人困惑了。请帮帮我。我上网查了一下,没有人问过这样的问题。

#include <stdio.h>
int main()
{
met2();
return 0;
}
void met1(int a[1])
{
a[0]=199;
}
void met2()
{
int b[1];
met1(b);
printf("%d",b[0]);
}

最佳答案

除非它是 sizeof 的操作数或一元 &运算符,或者是用于在声明中初始化字符数组的字符串文字,类型为“T 的 N 元素数组”的 表达式 会转换(“衰减”)为类型的表达式“指向 T 的指针”,表达式的值是数组第一个元素的地址。

当你打电话时

met1(b);

表达式 b从类型“int 的 1 元素数组”转换为类型“指向 int 的指针” ",表达式的值为 b[0] 的地址。

在函数原型(prototype)中

void met1(int a[1])

参数声明int a[1]被“调整”为int *a - 它实际上被声明为一个指针(这很方便,因为这就是函数实际接收的内容)。

所以当 met2来电 met1 ,它传递 b 第一个元素的地址。 []运算符可以用于指针和数组(它实际上是根据指针算术定义的 - a[i] 被解释为 *(a + i) )。

所以写a[0] = 199;met1相当于写b[0] = 199;met2 .

关于c - 数组 b[] 的值如何用另一个函数的另一个数组 a[] 值填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58372528/

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