c語(yǔ)言修改其他程序定義的靜態(tài)變量 C語(yǔ)言中關(guān)鍵字extern和static的區(qū)別是什么?
C語(yǔ)言中關(guān)鍵字extern和static的區(qū)別是什么?你這個(gè)問題挺的。有兩個(gè)關(guān)鍵詞幾乎完全不相關(guān)。區(qū)別真的很難回答。連接估計(jì)都是類型修飾符,差別太大。一般來說,extern修改全局變量或函數(shù)來表示外部
C語(yǔ)言中關(guān)鍵字extern和static的區(qū)別是什么?
你這個(gè)問題挺的。有兩個(gè)關(guān)鍵詞幾乎完全不相關(guān)。區(qū)別真的很難回答。連接估計(jì)都是類型修飾符,差別太大。一般來說,extern修改全局變量或函數(shù)來表示外部引用。C語(yǔ)言還有一個(gè)特殊用法,extern C表示這個(gè)程序應(yīng)該被認(rèn)為是用C語(yǔ)言寫的。
Static一般表示局部靜態(tài)變量,可以用在函數(shù)或文件中。
c語(yǔ)言,如何聲明定義一個(gè)在.h中和多個(gè).c中都能使用的變量?
靜態(tài)是聲明外部變量?jī)H限于這個(gè)文件的引用,是這個(gè)文件的全局變量。如果要在文件之間通用定義外部變量
變量的初始化?
一些編程語(yǔ)言不支持。;不一定要求程序員初始化變量(如VB),因?yàn)槿绻悴?t初始化,編譯器/解釋器會(huì)自動(dòng)幫你初始化(變量數(shù)據(jù)類型的默認(rèn)初始值會(huì)賦給變量)。
即使在C語(yǔ)言中,也有一些變量。;t需要初始化,比如靜態(tài)變量。規(guī)則如下:對(duì)于原生數(shù)據(jù)類型,用對(duì)應(yīng)類型的零值初始化;類中的靜態(tài)對(duì)象由它們的默認(rèn)構(gòu)造函數(shù)初始化。
此外,全局變量以及calloc()函數(shù)分配的空間將被自動(dòng)初始化。所以你理解的變量必須初始化。其實(shí)只是因?yàn)樵贑或類似語(yǔ)言中,局部自動(dòng)變量和寄存器變量是從堆、棧或寄存器中臨時(shí)分配(重用)的。我們不。;我不知道前面的代碼對(duì)這個(gè)空間做了什么,所以這些值是隨機(jī)的。
除非編譯器設(shè)置為調(diào)試模式,此時(shí)編譯器會(huì)自動(dòng)初始化局部變量(0xcc),這也是有時(shí)候調(diào)試模式成功但釋放模式錯(cuò)誤的原因。
全局變量和靜態(tài)變量不需要初始化是因?yàn)榫哂腥肿饔糜?包括全局和靜態(tài))的變量會(huì)從全局變量區(qū)分配空間,而由于RAM內(nèi)存的特性,這些變量會(huì)被自動(dòng)清除。
方法可以定義靜態(tài)變量嗎?
是的,
方法內(nèi)部的定義叫做 "局部變量 ",不是靜態(tài)變量。局部變量可以 不能添加靜態(tài)變量,包括受保護(hù)的、私有的和公共的,但是可以添加全局變量。靜態(tài)變量在類中定義,在方法體之外,局部變量保存在堆棧中。