开发者社区> 问答> 正文

C语言中全局变量调用后会被修改值吗?

C语言中全局变量被函数调用有会被修改原来的值吗?我在KR的书中看到函数是通过值传递的,修改的是副本,return一个值,而不能直接修改变量的值,但是我写的这一小段程序为什么会被修改了。main函数调用max后副本修改成了3,但是在test函数中为什么max的值是3?而不是原来的2?screenshot

#include <stdio.h>
int max = 2;
int test(int a);
main()
{
    int a, b;
    a = 1;
    b = 2;

    extern int max;
    max += a;
    printf("%d\n", max);
    printf("%d", test(b));
}
int test(int a)
{
    int p;
    extern max;
    p = max + a;
    return p;
}

展开
收起
杨冬芳 2016-05-30 14:44:20 5130 0
6 条回答
写回答
取消 提交回答
  • 全局变量可直接访问修改,和函数参数无关

    2020-03-19 10:52:13
    赞同 展开评论 打赏
  • 全局变量可直接访问修改,和函数参数无关

    2020-03-17 10:36:41
    赞同 展开评论 打赏
  • 专注物联网

    全局变量不需要传递啊,它不是函数的参数

    2019-07-17 19:20:35
    赞同 展开评论 打赏
  • 软件开发,安全加密

    函数通过值传递的是参数,函数内修改的是参数副本,但是你这个全局变量max并不是函数test的参数呀

    2019-07-17 19:20:35
    赞同 展开评论 打赏
  • 乐于学习与分析

    函数通过值传递的是参数,函数内修改的是参数副本,但是你这个全局变量max并不是函数test的参数呀

    2019-07-17 19:20:35
    赞同 展开评论 打赏
  • IT从业

    你理解错了。
    “函数是通过值传递的,修改的是副本“
    意思是,在test(b)这句函数调用时,b的值会被复制给函数内部的形参a,此时a是b的一个副本,修改a这个副本,是影响不了b的。

    2019-07-17 19:20:35
    赞同 展开评论 打赏
滑动查看更多
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
15分钟打造你自己的小程序 立即下载
小程序 大世界 立即下载
《15分钟打造你自己的小程序》 立即下载