为什么当我用C写简单的代码时,我会有问题?[已关闭]

gk7wooem  于 2023-10-16  发布在  其他
关注(0)|答案(2)|浏览(131)

已关闭此问题为not reproducible or was caused by typos。它目前不接受回答。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
上个月关门了。
Improve this question
我在学C。我有一个小问题,我不能解决。

如果我写“int characterAge = 35;在几行之后我写上“int characterAge = 20;“,程序将输出错误:

program.c: In function ‘main’:
program.c:11:7: error: redefinition of ‘characterAge’
   11 |   int characterAge = 20;
      |       ^~~~~~~~~~~~
program.c:6:7: note: previous definition of ‘characterAge’ with type ‘int’
    6 |   int characterAge = 35;
      |       ^~~~~~~~~~~~

怎么了?
我的代码:

#include <stdio.h>
#include <stdlib.h> 
int main()
{
  char characterName[] = "John";
  int characterAge = 35;

  printf("Character name is %s\n", characterName);
  printf("Character age is %d\n", characterAge);

  int characterAge = 20;

  printf("He was %d\n", characterAge);

  return 0;
}
iecba09b

iecba09b1#

这将创建一个名为characterAge的变量(初始化为35):

int characterAge = 35;

这将创建第二个名为characterAge的变量(初始化为20):

int characterAge = 20;

现在有两个名为characterAge的变量,只有一个是可访问的。这绝对是一件值得警惕的事情。
或者为第二个变量使用不同的名称

int characterEarlierAge = 20;
printf("He was %d\n", characterEarlierAge);

或者重复使用相同的变量

characterAge = 20;
printf("He was %d\n", characterAge);

第三个解决方案是限制变量的范围。

{
   const char *characterName = "John";
   int characterAge = 35;

   printf("Character name is %s\n", characterName);
   printf("Character age is %d\n", characterAge);
}

{
   int characterAge = 20;
   printf("He was %d\n", characterAge);
}
cwtwac6a

cwtwac6a2#

int characterAge = 35;不是赋值。它是一个声明,= 35指定characterAge的初始值。此外,带有初始化的声明也是一个定义;它指示编译器去创建对象。(不是定义的声明只是告诉编译器关于的东西,而不一定要创建它。
当编译器看到int characterAge = 20;时,您告诉它给予characterAge**初始值20。但您之前告诉它将初始值给予characterAge为35。一个事物不能有两个初始值。
你不能创造两次。characterAge应该只有一个定义。
如果你想在characterAge创建后改变它的值,你可以使用赋值:

characterAge = 20;

相关问题