gpt4 book ai didi

C 数组错误 - 要求我声明同一个变量两次

转载 作者:太空宇宙 更新时间:2023-11-04 00:45:32 25 4
gpt4 key购买 nike

我有一个用 c 编写的代码,基本上它接受一个数组并向后打印它。一个非常基本的东西。这是代码:

#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>

int main(){
int n;
scanf("%d",&n);
int *arr = malloc(sizeof(int) * n);
for(int arr_i = 0; arr_i < n; arr_i++)
{
scanf("%d",&arr[arr_i]);
}
for(arr_i=n-1; arr_i >= 0;arr_i--)
{
printf("%d ",arr[arr_i]);
}
return 0;
}

第二个 for 循环出现以下错误:

solution.c:17:9: error: ‘arr_i’ undeclared (first use in this function)

  for(arr_i=n-1; arr_i >= 0;arr_i--)

当我在第二个 for 循环中的 arr_i 之前插入 int 时,错误消失了。

所以,我怀疑为什么即使我已经在第一个 for 循环中声明了 arr_i,它还是要求我在第二个 for 中再次声明它循环?

最佳答案

arr_i 的范围仅限于第一个 for 循环。在第二个循环中,是不活的。

引用 C11,章节 §6.2.1

[...] If the declarator or type specifier that declares the identifier appears inside a block or within the list of parameter declarations in a function definition, the identifier has block scope, which terminates at the end of the associated block. [...]

为了详细说明,for 循环的可用语法之一是

 for ( declaration expressionopt ; expressionopt ) statement

在您的案例中使用。由于 arr_i 的声明出现在 for 循环的 clause-1 中,因此范围仅限于循环 scope 因此,此标识符在循环外未声明

如果您希望在两个循环中使用同一个变量,请在整个函数的 block 作用域中定义该变量,在本例中为 main() 函数。

也就是说,一般性建议,在使用返回的指针之前始终检查 malloc() 是否成功。

注意:如您所述,

When I insert int before the "arr_i" in the second for loop it goes away.

值得一提的是,在这种情况下,两个不同的变量存在于两个不同的作用域中。它们不是同一个变量。

关于C 数组错误 - 要求我声明同一个变量两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41492507/

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