鱼C论坛

 找回密码
 立即注册
查看: 3511|回复: 14

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

[复制链接]
发表于 2017-11-17 20:51:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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);
   
}
刚刚学到这里,产生了一点点疑问,望大佬们帮我解惑。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-11-17 21:03:47 | 显示全部楼层
别沉啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-17 21:09:05 | 显示全部楼层
这里牵扯到的是变量作用域的问题

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

所以在main函数外面定义的a是全局变量,而内部是局部变量,为了实现你的要求,你可以用一对大括号限定内部局部变量的范围
main()
{
    {
    int a;
    printf("%d\n",a); //a未初始化,输出是一个随机数
    }
    printf("%d\n",a);   //之后都是全局变量a
    a=a-2;              
...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-17 21:23:50 | 显示全部楼层
换名字啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-17 23:56:13 | 显示全部楼层
BngThea 发表于 2017-11-17 21:09
这里牵扯到的是变量作用域的问题

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

感谢您的回答,局部变量a忘记赋值了,把a=5吧。
但是如果只在第二个printf用全局变量,后面的a=a-2还是用局部变量又该怎么改呢?
我在网上找到了一种方法就是   ::a   ,可以直接调用全局变量,那么如果是有很多语句要这么用,岂不是要打很多遍  ::  ,这样太麻烦了,是否还有其他比较简便的方法?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-18 00:01:50 | 显示全部楼层

我知道换名字可以实现,但是我就是想知道只到在同一个变量名的情况下可以怎么处理。BTW,谢谢您的回答。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

没有,只能用全局变量的作用域进行声明
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-18 11:19:23 | 显示全部楼层
第一次看到这样的问题,虽然我也不会。。。从来不敢定义同名的变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

教程说得很明白了,不同作用域 相同名字局部 覆盖 全局。没有你想像的那么美好,还可以在局部声明个和全局一样的,然后通过某某方法调用全局的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}

另外发代码要这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-18 20:59:14 | 显示全部楼层
我是师兄 发表于 2017-11-18 13:24
写一个指针指向全局a 就可以了

谢谢,不过我还没学到指针,emmmm,想问一下,在a前加  ::  这个知识点叫什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

全局作用域
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-19 10:02:49 | 显示全部楼层
密发小和尚 发表于 2017-11-18 20:59
谢谢,不过我还没学到指针,emmmm,想问一下,在a前加  ::  这个知识点叫什么?

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

C是用不了的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-19 14:39:33 | 显示全部楼层
我是师兄 发表于 2017-11-19 10:02
C++的作用域运算符
表示 全局作用域

我在C-free上能用啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-19 15:24:08 | 显示全部楼层
密发小和尚 发表于 2017-11-19 14:39
我在C-free上能用啊。

看看你的文件后缀名是不是 .cpp
.cpp后缀名是按照C++语法进行编译处理的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-28 20:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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