【C语言笔记】<二十一>内部全局变量和外部全局变量

【C语言笔记】<二十一>内部全局变量和外部全局变量,第1张

1.外部全局变量, 默认情况下所有的全局变量都是外部全局变量

什么事外部全局变量? 可以被其它文件访问的全局变量我们称之为外部全局变量

2.内部全局变量, 只要给全局变量加上static关键字就是内部全局变量

什么是内部全局变量? 只能被当前文件访问的全局变量我们称之为内部全局变量

可以定义同名的外部全局变量

多个同名的外部全局变量指向同一块存储空间

也可以定义多个同名的内部全局变量

多个同名的全局变量如果不在同一个文件中, 那么指向不同的存储空间

为了提高数据的安全性, 不让别人在其它文件中修改我们的全局变量, C语言提供了另外一个用于修改全局变量的关键字, static

只要用static修改的全局变量就是内部全局变量, 只能在当前文件中使用

这样就可以提高我们全局变量的安全性

如果多个文件中存在同名的内部全局变量, 相互不会影响

如果既有外部全局变量也有内部全局变量, 那么会优先访问内部全局变量

用于声明一个外部全局变量

声明只需要在使用变量之前声明就可以了

用于定义一个内部全局变量

声明和定义的区别:

声明不会开辟存储空间

定义会开辟存储空间

在C语言中,全局变量和函数声明及定义并列,也就是说,声明在最外层作用域的变量即为全局变量

如在如下程序中

int i

int main()

{

int i_copy = i

i = 9

return 0

}

int

i就是一个全局变量,故在main函数中可以调用或修改i的值

所以,定义数组也和普通全局变量的方法相同,如

char str[10]

int main()

{

str[0] = 'a'

str[1] = '\0'

return 0

}

但是有几点需要注意:

C中自上向下语法分析和编译语法树,如果要让所有函数都能调用该全局变量,就要把其放在所有函数定义之前,确保声明的作用域覆盖整个程序;

在全局变量声明时,其初始值必须为编译时常量,不能为变量;

若要使用程序外的全局变量,需要在修饰符中加入extern关键字,并不要忘了和原本定义处链接

1、记住一条就够了:在函数之外定义的变量就是全局变量。用static修饰的变量可以是全局的,也可以是局部的,所以说“用static修饰的变量是全局变量”是错误的。用static修饰的变量的生命周期与全局变量一样,但可见性仍分全局和局部。

2、全局变量在整个c文件中都能使用,而局部变量在其作用域内才能使用,举个例子:

int f = 7// 这个是全局变量

int myadd(int a, int b)

{

int c = a + b// c是局部变量,只能在myadd中使用

return c

}

int main(void)

{

printf("%d\n", c)// 因为c是myadd中定义的局部变量,这里会报错。

printf("%d\n", f)// f是全局变量,这句是正确的。

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/6593694.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-25
下一篇 2023-03-25

发表评论

登录后才能评论

评论列表(0条)

保存