密发小和尚 发表于 2017-11-17 20:51:12

新手上路,关于全局变量调用的问题。。

#include<stdio.h>
int a=10;
main()
{
    int a;
    printf("%d\n",a);
    printf("%d\n",a);   \\想要在这里调用全局变量
    a=a-2;                   \\如果在这里也用全局变量该怎么写?
    printf("%d\n",a);
    fnu();
    return 0;
}
int fun()
{
    printf("%d",a);
   
}
刚刚学到这里,产生了一点点疑问,望大佬们帮我解惑。

密发小和尚 发表于 2017-11-17 21:03:47

别沉啊

BngThea 发表于 2017-11-17 21:09:05

这里牵扯到的是变量作用域的问题

为了实现你要的功能,你需要明白,在一个大括号里面定义的同名变量会自动覆盖该大括号外部的同名变量

所以在main函数外面定义的a是全局变量,而内部是局部变量,为了实现你的要求,你可以用一对大括号限定内部局部变量的范围
main()
{
    {
    int a;
    printf("%d\n",a); //a未初始化,输出是一个随机数
    }
    printf("%d\n",a);   //之后都是全局变量a
    a=a-2;            
...

ba21 发表于 2017-11-17 21:23:50

换名字啊。

密发小和尚 发表于 2017-11-17 23:56:13

BngThea 发表于 2017-11-17 21:09
这里牵扯到的是变量作用域的问题

为了实现你要的功能,你需要明白,在一个大括号里面定义的同名变量会自 ...

感谢您的回答,局部变量a忘记赋值了,把a=5吧。
但是如果只在第二个printf用全局变量,后面的a=a-2还是用局部变量又该怎么改呢?
我在网上找到了一种方法就是   ::a   ,可以直接调用全局变量,那么如果是有很多语句要这么用,岂不是要打很多遍::,这样太麻烦了,是否还有其他比较简便的方法?

密发小和尚 发表于 2017-11-18 00:01:50

ba21 发表于 2017-11-17 21:23
换名字啊。

我知道换名字可以实现,但是我就是想知道只到在同一个变量名的情况下可以怎么处理。BTW,谢谢您的回答。

BngThea 发表于 2017-11-18 09:18:03

密发小和尚 发表于 2017-11-17 23:56
感谢您的回答,局部变量a忘记赋值了,把a=5吧。
但是如果只在第二个printf用全局变量,后面的a=a-2还是 ...

没有,只能用全局变量的作用域进行声明

A.aron 发表于 2017-11-18 11:19:23

第一次看到这样的问题,虽然我也不会。。。从来不敢定义同名的变量

ba21 发表于 2017-11-18 11:48:39

密发小和尚 发表于 2017-11-18 00:01
我知道换名字可以实现,但是我就是想知道只到在同一个变量名的情况下可以怎么处理。BTW,谢谢您的回答。

教程说得很明白了,不同作用域 相同名字局部 覆盖 全局。没有你想像的那么美好,还可以在局部声明个和全局一样的,然后通过某某方法调用全局的

我是师兄 发表于 2017-11-18 13:24:51

写一个指针指向全局a 就可以了
#include<stdio.h>
int a=10;
int fun()
{
    printf("%d",a);
   
}
int main()
{
    int a = 5;
    int* p;
    {
            p = &a;
    }
    printf("%d\n",a);       
    printf("%d\n",*p);//想要在这里调用全局变量
    a = *p-2;
    printf("%d\n",a);
    fun();
    return 0;
}


另外发代码要这样

密发小和尚 发表于 2017-11-18 20:59:14

我是师兄 发表于 2017-11-18 13:24
写一个指针指向全局a 就可以了




谢谢,不过我还没学到指针,emmmm,想问一下,在a前加::这个知识点叫什么?

<(¥_$)> 发表于 2017-11-18 23:47:54

密发小和尚 发表于 2017-11-18 20:59
谢谢,不过我还没学到指针,emmmm,想问一下,在a前加::这个知识点叫什么?

全局作用域

我是师兄 发表于 2017-11-19 10:02:49

密发小和尚 发表于 2017-11-18 20:59
谢谢,不过我还没学到指针,emmmm,想问一下,在a前加::这个知识点叫什么?

C++的作用域运算符
表示 全局作用域

C是用不了的

密发小和尚 发表于 2017-11-19 14:39:33

我是师兄 发表于 2017-11-19 10:02
C++的作用域运算符
表示 全局作用域



我在C-free上能用啊。

我是师兄 发表于 2017-11-19 15:24:08

密发小和尚 发表于 2017-11-19 14:39
我在C-free上能用啊。

看看你的文件后缀名是不是 .cpp
.cpp后缀名是按照C++语法进行编译处理的
页: [1]
查看完整版本: 新手上路,关于全局变量调用的问题。。