亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

靜態局部變量又和靜態全局變量又有何區別?

static int x = 1; ? //定義靜態局部變量 ? ?x*=2; ? ?printf("x=%d\n",x); ? ? 靜態局部變量在編譯時賦初值,即只賦初值一次;-->靜態局部變量值可以變化嗎? 如果可以變化,那么靜態局部變量又和靜態全局變量又有何區別?

正在回答

1 回答

首先:C語言中的名字(標識符)具有很多屬性:生存期、可鏈接性...等

生存期分為:

  1. 靜態生存期:在程序開始前就已經存在并初始化了,這個變量要的等整個程序都結束后才銷毀。

  2. 動態生存期:就是程序流程運行到這個位置時才為這個變量分配內存,程序流程離開這個變量的作用域后就銷毀了它。

可鏈接性大致分為:

  1. 內部鏈接:這個變量可以在代碼所在的文件中使用。

  2. 外部鏈接:這個變量在整個程序中(所有的文件中)都可以使用。

  3. 不可鏈接:這個變量只能在其代碼塊中被使用。常見的情況就是只能在其所在的函數中被使用。


static修飾符對于局部變量和全局變量的意義是不一樣的:

局部變量默認具有 動態生存期不可鏈接 的屬性。 局部變量是存在于函數中的,由于它具有動態生存期,故你每一次調用函數,其中的這個變量都是全新的一個。你存儲于其中的值在函數調用結束后就不存在了,再次調用這個函數的得到的仍是全新一個變量。 但如果變量被static修飾,就成了靜態局部變量,“靜態”是指改變了其生存期,變成了靜態生存期,那么多次調用這個函數所訪問的就是同一個變量。這樣你存入其中的值在下一次函數調用時仍然存在。

全局變量默認具有 靜態生存期外部鏈接 屬性。 全局變量是存在于一個代碼文件中,并且是任何一個函數之外的。它在整個程序運行期間都存在,并且外部鏈接性保證它可以被本程序的其他文件中的代碼所使用。 而如果被static修飾,則鏈接性就變成內部鏈接了,那這個變量就只能被本文件中的代碼使用了。對它來說static并不改變其生存期。


你提問中說的“靜態局部變量...只賦初值一次”說的就是你每一次調用函數其實都是用的同一個變量,而不是像普通局部變量一樣在每次調用時都重新生成,重新初始化。

所以明白了嗎:靜態局部變量的值當然是可以變化的,而且它可以讓你在多次調用函數后保留存在其中的值。

“靜態”二字對于兩種變量來說都不影響其值是否可以被改變,變量的值能否被改變是由?const限定符 決定的。


4 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

靜態局部變量又和靜態全局變量又有何區別?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號