C語言變量和全局變量能否重名問題
C語言變量和全局變量能否重名
解答
全局變量和局部變量是按照變量的作用域劃分的。
簡單地說,局部變量是定義在函數(shù)內部的變量;全局變量是定義在函數(shù)之外的變量。
全局變量可以為本文件中其他函數(shù)所共用。
局部變量和全局變量可以重名,局部變量會屏蔽全局變量。要使?全局變量,要在變量名前添加" :: "。
心得
局部變量和全局變量是可以重名的,因為它們的作用域不同。
在函數(shù)中,默認使用的是局部變量。
全局變量和局部變量重名了會怎么樣
在交流群里面看到這樣一個問題:
為什么這個程序中下面我定義的void型函數(shù)smart在全局變量前聲明了,但是在man函數(shù)中調用了smart函數(shù),m的值打印出來還是0。
#include<stdio.h>
int m;
void smart(void);
int main(void)
{
printf("m = %d.\n", m);
smart();
printf("m = %d.\n", m);
//m+=1;
//printf("m = %d.\n", m);
return 0;
}
void smart(void)
{
int m = 25;
}說實話,這個問題對于C語言有一個簡單理解的肯定明白問題在哪里。但是,群里面人講了半天沒講到重點,還是有點抓急。有講局部變量函數(shù)執(zhí)行結束自動釋放的,所以全局變量的m沒有被改變。有講作用域不同的。千奇百怪的回答。
因為,能夠搜到這篇文章的,大概率都是新手小白,我也就不會講太深奧的東西了,盡量以簡單易懂的語言講明白。
全局變量和局部變量同名編譯器是如何處理
(1)如果在函數(shù)內部同時存在一個局部變量和一個全局變量,它們的名字相同,那么在函數(shù)內部使用該變量時,將優(yōu)先使用局部變量。
(2)舉個現(xiàn)實生活的例子,兩個除了長相不同,其他都一樣的角色。一個是游戲活動期間才能玩的角色A,一個是你永久擁有的角色B。
- 雖然他們的數(shù)值是一樣的,但是對于絕大多數(shù)玩家而言,在活動期間大概率還是會優(yōu)先用限時角色A。
- 但是呢,游玩角色,打怪能夠升級??墒墙巧獳在活動結束之后,就會消失,那么活動期間你所得到的所有經驗值都會消失。并不會反饋給永久角色B。
- 最后,你只能憤憤不平,被官方擺了一套。
(3)根據(jù)上面這個舉例,我們就很好理解了全局變量和局部變量同名情況了。
對于計算機而言,全局變量和局部變量究竟是什么?
(1)我們都知道,對于計算機而言,他本質上只能夠識別0和1。哪些所謂的代碼,變量名,其實都是給人類看的。因此,我們人類看到全局變量和局部變量名字一樣,但是對于計算機而言是不一樣的。
(2)這個將人類看的懂的語言,變成計算機能夠看懂的01語言需要通過編譯器來決定。
(3)當你在代碼中寫了一個全局變量m和一個局部變量m。編譯器就會開辟兩個不同的地址分別存放全局變量m和局部變量m。
- 當你在smart()函數(shù)調用m變量的時候,編譯器就會告訴機器,你應該操作的是地址A。
- 當smart()函數(shù)調用結束的時候,編譯器就會告訴機器,你應該操作的是地址B。同時機器會自己將地址A釋放掉。
- 那么你在地址A做的操作是無效的。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
C++中signed?main和int?main的區(qū)別
這篇文章介紹了C++中signed?main和int?main的區(qū)別,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-12-12
C語言超詳細講解數(shù)據(jù)結構中雙向帶頭循環(huán)鏈表
帶頭雙向循環(huán)鏈表:結構最復雜,一般用在單獨存儲數(shù)據(jù)。實際中使用的鏈表數(shù)據(jù)結構,都是帶頭雙向循環(huán)鏈表。另外這個結構雖然結構復雜,但是使用代碼實現(xiàn)以后會發(fā)現(xiàn)結構會帶來很多優(yōu)勢,實現(xiàn)反而簡單2022-04-04

