您的位置:首页 > 产品设计 > UI/UE

关于全局变量,局部变量的一些看法!!!

2016-03-07 19:37 309 查看
1,全局变量,和局部变量的生存周期咋样呢,存储位置呢??

2,假如全局变量和局部变量定义赋值都是一样的,那么printf函数里调用变量会出现什么结果??把局部变量去掉呢??

3,对于一个c/c++程序而言,全局变量真的只是定义在所有函数之外就ok的吗??假如某一个全局变量定义在最底部,那么上面的那些程序可以用这些全局变量吗???

4,谁又知道(::value)这个是什么玩意啊??

下面大家一起看个程序:

#include <stdio.h>

int num = 5, sco= 8;

void print()
{
printf("%d   , %d\n", num , sco);
}

int main()
{
int num = 3,sco = 8;
print();

printf("%d  %d \n", num , sco);

return 0;
}
大家可以试着想一下结果(希望各位可以思考一小会):

运行结果:



可以看到,虽然在这个程序里面定义了两次的num,sco,但是定义它们的位置是不一样的,一个是在main函数之外,另一个在main函数里面,所以,可以知道,在main函数里面的是局部变量,在main函数之外的是全局变量

全局变量:存储在全局区,且生命周期是一直到程序整体退出

局部变量:(程序运行时)存储在栈区, 生命周期是仅仅在当前的函数中,函数运行完,退出时,生命也就结束!!

所以,我们可以知道,在main函数里,我们先调用的是print函数,而它打印的变量是全局变量(对于当前这个程序)

所以它打印出了5,8

执行完毕,调用printf函数,里面也用到了参数,可以想明白的是,printf这类的函数是位于某一个函数底下的,所以先是查看当前函数里有没有可以用到的变量(局部变量),如果没有的话,那么查看全局变量,如果有的话,调用之。

程序2:

#include <stdio.h>

int num = 5,sco = 8;

void print()
{
printf("%d  %d\n", num , sco);
}

int main()
{
print();

printf("%d  %d \n", num , sco);

return 0;
}
运行结果:



可以看到,运行结果跟我们想得是一样的!!!

那么如果把全局变量放在最低部,会出现什么情况,还能正常编译和运行吗??

#include <stdio.h>

void print()
{
printf("%d %d\n", num , sco);
}

int main()
{
print();

printf("%d %d \n", num , sco);

return 0;
}

int num = 4, sco = 5;


能编译通过吗??答案显而易见是不行的。。。
编译如下:



可以看见,这里面报了好多错,未声明在这个区域里

这时该咋办啊!!!

啊啊啊啊

后来,思考着是不是可以考虑用一下extern,就意味着这个全局变量已经在其他地方定义过了,试一试,,

#include <stdio.h>

extern int num,sco;

void print()
{
printf("%d %d\n", num , sco);
}

int main()
{
print();

printf("%d %d \n", num , sco);

return 0;
}

int num = 4, sco = 5;
好啦,编译通过,运行正确

哈哈(还是有点小激动)

所以,总结如下,对于全局变量它的生命周期是从当前定义的地方一直到程序运行完毕,之前的函数是不可以操作这个全局变量的,不然会报出编译错误的提示,当然,这里也可以用extern来解决这个问题,我觉得extern这个用法应该是碰见extern,只能表明变量不在当前预编译的程序中,也可能是在下面还么有编译到的程序语句中,先预编译下面的语句,然后再去当前工程的其他c文件/cpp文件中查找变量,如果没有报错,如果有,进行相应的操作

关于::value

#include <stdio.h>

int value = 0;

void printvalue()
{
printf("value = %d\n", value);
}

int main()
{
int value = 0;
value = 1;
printf("value = %d\n", value);

::value = 2;
printvalue();

return 0;
}


运行结果:



这回明白了吧!!其实(::value)在c++中就可以简单的理解为通过域操作符(::)来直接操作全局变量,但是值得注意的是,c中没有也不支持这个操作符
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息