你對C了解嗎?深入理解C語言
我們來看一段代碼:
#include
voidf(void)
{
staticinta = 3;
staticintb;
intc;
++a; ++b; ++c;
printf("a=%d
", a);
printf("b=%d
", b);
printf("c=%d
", c);
}
intmain(void)
{
f();
f();
f();
}
我相信你對a的輸出相當有把握,就分別是4,5,6,因為那個靜態變數。這個程序會輸出什麼?
對於c呢,你應該也比較肯定,那是一堆亂數。
但是你可能不知道b的輸出會是什麼?答案是1,2,3。為什麼和c不一樣呢?因為,如果要初始化,每次調用函數里,編譯器都要初始化函數棧空間,這太費性能了。但是c的編譯器會初始化靜態變數為0,因為這只是在啟動程序時的動作。
全局變數同樣會被初始化。
說到全局變數,你知道 靜態全局變數和一般全局變數的差別嗎?是的,對於static 的全局變數,其對鏈接器不可以見,也就是說,這個變數只能在當前文件中使用。
想要一起學習C++的可以加裙二四八八九四四三零,裙內有各種資料滿足大家,歡迎加裙
※從零開始系統學習C語言C加加,零基礎到項目實戰
※為了解決C語言的不完美和缺陷,C加加的這些特性,你了解過么?
※C語言編程——模擬鬥地主自動發牌
※深入理解C語言的預編譯指令之 include
TAG:C加加 |
※漢奸,你理解對了嗎?
※你,理解我嗎?
※如何理解「想」?
※你了解古風嗎?你對它的理解是否正確呢?
※對「言」的理解
※「你得理解我」「理解你,理解你,那誰來理解我?」
※如何理解「觸」?
※如何理解「受」?
※● 對不起!我無法理解你!
※什麼是理解?
※對不起!我無法理解你!
※如何理解「不害」?
※你對玉是如何理解的?
※如何理解啟蒙?
※我對「朋友」的理解
※淺談我對OKR的理解
※難以理解的韓國文化TOP3,你猜對了嗎?
※你對智商的理解全面嗎?
※理解歸理解,我還是想說:易烊千璽,你做錯了
※您說什麼它都能理解?對話式搜索了解一下