鱼C论坛

 找回密码
 立即注册
查看: 131|回复: 2

[已解决]关于C语言全局变量的一些基本问题

[复制链接]
发表于 2024-3-17 11:46:45 | 显示全部楼层 |阅读模式
60鱼币
  1. #include <stdio.h>
  2. int i =1;

  3. int test(int i){
  4.    i+=1;
  5.    printf("test_%d \n",i);
  6.    return i;
  7. }

  8. int test1(int i){
  9.    i+=1;
  10.    printf("test1_%d \n",i);
  11.    return i;
  12. }

  13. int main()
  14. {
  15.   
  16.         test(i);
  17.         test1(i);
  18.         printf("main_%d \n",i);   
  19.    return 0;
  20. }
复制代码


实际执行结果:
        test_2
        test1_2
       main_1

我认为应该输出的结果:
              test_2
        test1_3
       main_3   

表示不理解,有没有大神解答一下,感谢




最佳答案
2024-3-17 11:46:46
在这段代码中,有一个全局变量i的声明并初始化为1。然后,在test函数中,有一个参数名也叫做i,在函数内部对这个参数进行了自增操作并输出。在test1函数中,同样有一个参数名也叫做i,也对参数进行了自增操作并输出。在main函数中,先调用test函数,再调用test1函数,并输出全局变量i的值。

实际执行结果是因为在函数中使用了和全局变量同名的参数,这会导致函数内部使用的是参数的值而不是全局变量的值。当函数执行完毕后,参数的值不会影响外部的全局变量。因此,在调用test和test1函数时,全局变量i的值并没有被修改,所以在main函数中输出的仍然是初始值1。

如果你想要达到你认为应该输出的结果,可以将参数的名字改成不同于全局变量的名字,如下所示:

  1. #include <stdio.h>

  2. int i = 1;

  3. int test(int num){
  4.    num += 1;
  5.    printf("test_%d \n", num);
  6.    return num;
  7. }

  8. int test1(int num){
  9.    num += 2;
  10.    printf("test1_%d \n", num);
  11.    return num;
  12. }

  13. int main()
  14. {
  15.     i = test(i);
  16.     i = test1(i);
  17.     printf("main_%d \n", i);
  18.     return 0;
  19. }
复制代码


这样就能够得到你期望的输出结果了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

最佳答案

查看完整内容

在这段代码中,有一个全局变量i的声明并初始化为1。然后,在test函数中,有一个参数名也叫做i,在函数内部对这个参数进行了自增操作并输出。在test1函数中,同样有一个参数名也叫做i,也对参数进行了自增操作并输出。在main函数中,先调用test函数,再调用test1函数,并输出全局变量i的值。 实际执行结果是因为在函数中使用了和全局变量同名的参数,这会导致函数内部使用的是参数的值而不是全局变量的值。当函数执行完毕后,参 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-3-17 11:46:46 | 显示全部楼层    本楼为最佳答案   
在这段代码中,有一个全局变量i的声明并初始化为1。然后,在test函数中,有一个参数名也叫做i,在函数内部对这个参数进行了自增操作并输出。在test1函数中,同样有一个参数名也叫做i,也对参数进行了自增操作并输出。在main函数中,先调用test函数,再调用test1函数,并输出全局变量i的值。

实际执行结果是因为在函数中使用了和全局变量同名的参数,这会导致函数内部使用的是参数的值而不是全局变量的值。当函数执行完毕后,参数的值不会影响外部的全局变量。因此,在调用test和test1函数时,全局变量i的值并没有被修改,所以在main函数中输出的仍然是初始值1。

如果你想要达到你认为应该输出的结果,可以将参数的名字改成不同于全局变量的名字,如下所示:

  1. #include <stdio.h>

  2. int i = 1;

  3. int test(int num){
  4.    num += 1;
  5.    printf("test_%d \n", num);
  6.    return num;
  7. }

  8. int test1(int num){
  9.    num += 2;
  10.    printf("test1_%d \n", num);
  11.    return num;
  12. }

  13. int main()
  14. {
  15.     i = test(i);
  16.     i = test1(i);
  17.     printf("main_%d \n", i);
  18.     return 0;
  19. }
复制代码


这样就能够得到你期望的输出结果了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

点评

明白了 多谢 (关键词实 际执行结果是因为在函数中使用了和全局变量同名的参数,这会导致函数内部使用的是参数的值而不是全局变量的值)  发表于 2024-3-17 11:54
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 13:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表