C语言 外部存储类输出

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

所以我的问题是,main中是否有两个变量x,一个转到g(),值为1,转到那里打印2,另一个保持1,在main中再次打印2。**

#include <stdio.h>
void f(){
    extern int x;
    
    x++;
    printf("%d",x);
    
}
  int x;
void g(){
   
    ++x;
    printf("%d",x);
}
int main() {
    // Write C code here
    x++;
    g();
    
    printf("%d",x);

    return 0;
}

产量:22

wz1wpwve

wz1wpwve1#

这里,main中的x和全局作用域中g()之外定义的x引用的是同一个x。另外,由于前面的声明,变量x在整个代码中都是extern
尝试在所需位置打印x的地址。
请参阅此answer了解更多信息

agyaoht7

agyaoht72#

主变量中是否有两个名为x的变量
不可以,只有 * 一个 *,并且具有静态存储时间。它被定义在g()函数定义之上。
你可以通过在你的printf s中添加一些东西来检查它:

void f(void)
{
    extern int x;
    
    x++;
    printf("%d %p\n", x, (void *)&x);
}

int x;

void g(void)
{
    ++x;
    printf("%d %p\n", x, (void *)&x);
}

int main(void) 
{
    x++;
    g();
    printf("%d %p\n", x, (void *)&x);
}

输出:

2 0x40401c
2 0x40401c

https://godbolt.org/z/sxYnfzqhP

相关问题