1樓:匿名使用者
全域性變數的初始化 對於不同編譯單位的全域性變數,其初始化的順序沒有任何的保證,因此對不同編譯單位裡的全域性變數,在它們的初始化順序之間建立依賴性都是不明智的。 此外也沒辦法捕捉到全域性變數初始化丟擲的異常,一般來說要減少全域性變數的使用,特別是限制那些要求複雜初始化的全域性變數。
1,儘量不用全域性變數
2,用靜態變數,通過訪問器進行訪問 例如:全域性變數int a = 5;
int b = a;
如果a,和b定義在同一個檔案裡,那沒什麼問題,結果b等於5.如果a和b定義在不同檔案裡,就不能保證b也等於5,也就是說不能保證a先初始化. 事實上,除了在同一個檔案定義的全域性物件的初始化是按照定義次序來進行的之外,其他全域性或靜態變數之間的初始化次序沒有任何保障。解決這種問題的方法是不直接使用全域性變數,而改用一個包裝函式來訪問,例如
int get_a()
int get_b()
2樓:天雲小店
變數的初始化就是在定義變數的時候,直接對變數進行賦值操作。
初始化的方式一般有如下兩種:
1、直接對變數進行賦予常量數值進行初始化;
2、通過同型別變數進行初始化。
舉例說明如下:
// 以下屬於第1種初始化方式
int a1=5; // 整型變數的初始化int b1=; // 整型陣列的初始化
char str1="abcd"; // 字元陣列的初始化// 以下屬於第2種初始化方式
int a2 = a1; // 整型變數的初始化int b2[4] = b1; // 整型陣列的初始化char str2[4] = str1;// 字元陣列的初始化char *p = str1; // 字元指標的初始化
3樓:匿名使用者
這個就只有二種,一種、在定義是就初始化 二種、就是先定義,在初始化
4樓:匿名使用者
在程式中自己定義副初值 或者在程式的開頭定義撒
5樓:匿名使用者
多看看書吧 已發到你郵箱
c語言中變數的初始化怎麼理解?
6樓:匿名使用者
c的區域性變數一般是在棧上進行分配的。
棧使用的是ram,掉電內容丟失,上電內容隨機。
這裡的隨機,一般指其不能確定其內容一定是什麼,而不是說其內容完全沒有規律,與數學上的隨機數沒有什麼關係。
舉個例子,一個位元組的ram,8位有256種可能。數學上講隨機數,那麼這個位元組上電後應該是256種可能性中某一個。但計算機上不是這樣,其上電後的內容一般來說就是0,但你不能保證它一定就是零,有很小的可能它的內容不是0,那麼是多少呢?
不知道!在程式處理上,你就要認為它的內容是隨機的。
回到你的問題,你沒有初始化,得到了一個確定的執行結果,為什麼?兩個可能,這個結果內容就是隨機的,只不過結果恰好是這個值而已,但你不能保證下次執行結果,那麼你就需要把它當隨機值對待。另一個可能,你在不經意間執行了初始化,因為c編譯器本身會連結一些初始化程式,這個牽涉到另一個話題,系統是怎麼樣進行初始化的。
結論,變數應該明確的進行初始化。如果系統不能確定你的變數初值是一個確定的值,那麼就需要你自己來做初始化。
7樓:風若遠去何人留
c語言的變數初始化,就是在定義變數的時候,賦予一個初始值。
形式為type var_name = init_value;
其中init_value就是初始化值了。
類似於type var_name;
var_name = init_value;
不過,基於編譯器的實現,一般初始化值的方式要比先定義後賦值更高效。另外,有些初始化是必須的。比如常量的定義,必須在定義的時候賦予初始化值。
8樓:匿名使用者
你這樣理解其實也是可以的
但那只是個臨時空間,
如果編譯執行會為其分配記憶體空間,只是你的a沒有值,所以系統會給它一個隨機值
9樓:匿名使用者
給予變數一個初始的值,以便下次操作
10樓:
定義不是初始化,int a叫定義,編譯時分配記憶體。如果a不是全域性變數會分配一個隨機值,如果a是全域性變數,則a自動賦初值0。int a=3是定義並初始化,int型還不明顯,某些型別,如指標型別,const型別是必須初始化的,否則會報錯。
c語言中變數初始化與賦初值有什麼不同?
11樓:匿名使用者
語法上的初始化是指物件定義時,對應的分配空間之後對於值的操作。c語言中,靜態和全域性變數預設置0,有初始化列表的複製初始化列表的值到空間(如有不足,剩餘部分置0),區域性自動變數可以不初始化(偵錯程式參與時可能被隱式地初始化為其它的值("debug magic number"),例如預設情況下microsoft c/c++ debugger會把棧中未初始化的位元組置為0xcc)。
賦初值一般而言是指邏輯意義上的初始化。在c語言中,由於初始化的語法是「=」後加初值,所以「賦初值」基本上就是指語法上的初始化。不過隨著語言的發展,「賦初值」的意義發生了擴大。
對有構造語義但又允許不初始化而不產生編譯錯誤的程式設計語言而言,兩者有些微妙的差別。例如c++的建構函式中,用若干個成員名和括號括起來的初始化值構成的初始化列表是語法上的初始化(也可能是邏輯意義上的初始化,如果沒有被建構函式體內的值覆蓋),而建構函式體中對成員的賦值語句是邏輯上的初始化但不是語法上的初始化。
冰的悸動 錯誤:
1.「程式開始時進行初始化」的說法僅僅適用於靜態或全域性變數,而不適於區域性自動變數。區域性自動變數在函式呼叫時才能被初始化。
2.「但是根據編譯器的不同有些編譯器會自動賦初值0或其他」——這在iso/iec c語言標準中不是由實現定義的行為,如果一個編譯器符合標準,那麼行為就是明確的,即視此初始化的物件是否為全域性物件來判斷隱式初始化置0還是不進行初始化——從下面的函式定義來看這裡應該var2是全域性變數,會被置0。非標準編譯器則另當別論(但是我還沒見過會在這點上沒事找茬的)。
12樓:冰的悸動
所謂初始化,就是指系統(程式)起始狀態時,各種引數(變數)應該取什麼樣的值,因為系統在reset時,記憶體資料可能不定,所以需要在程式開始時進行初始化(變數賦值,控制暫存器賦值配置等)。
賦初值一般指定義一個變數的同時就賦值。
其實,「變數初始化」和「賦初值」只是2種說法,目的都差不多,不必太「糾結」這兩個詞。
下面是一個mainloop的結構,當然也可以不用loop,具體根據你的程式用處決定
/*一般需要初始化的變數都是全域性變數 定義變數var2 */
uint16 var2; /*此處var2,僅僅分配了記憶體空間2位元組,但是沒有賦初值,所以var2的具體值是多少不清楚,但是根據編譯器的不同有些編譯器會自動賦初值0或其他*/
void sysinit(void)
main()
} 剛剛看了「幻の上帝」的回答,似乎也沒能說清「初始化」和「賦初值」的區別,只是用「微妙」形容了一下。
關於指出的2點錯誤,再此首先表示感謝,下面是我的答覆:
1.指出「區域性auto變數」在我上述論述中,首先並沒有提到。再者,「區域性auto變數」本身的特性就是在函式呼叫時才臨時分配(一般分配在堆疊中),函式退出時釋放。
所以,區域性auto變數要在函式呼叫時才能被初始化,這個說法有點「說了也白說」的感覺。而且我也並沒有提到適用於「區域性auto變數」。既然說到這裡了,順便提一下慎用「static區域性變數」,首先就是長期佔用(函式退出時也佔用,不釋放);其次,降低程式的可讀性(多次呼叫這個函式時,如果開始不對其賦初始值[有點廢話的感覺],那麼就往往弄不清static區域性變數的值)。
2.既然我也提到了和編譯器有關,我也沒有說一定是0或不是0,只是要根據編譯器,目的是為了解釋為什麼要進行「初始化」的初衷,如果為了討論各種編譯器的標準的話,那我再此先謝謝你提供的訊息,但是我覺得沒有必要去糾結這些標準,我們只要養成良好的程式設計習慣,記得定義完變數後,進行「賦初值」或「初始化」,就ok了,這樣就不會去爭論編譯器自動賦什麼初值。再者c編譯器也好c的標準也好,都也在不斷的更新。
所以我認為我上面的說法也並沒有什麼錯誤。
13樓:匿名使用者
c語言中應該沒有區別吧,在物件導向的程式設計語言中往往會有區別。
c語言中怎麼初始化字元變數?
14樓:天雲小店
c語言中,初始化操作就是在定義變數的時候,對變數進行賦值,即稱為變數的初始化。對於字元變數也是一樣的。
舉例如下:
char ch='a'; // 定義一個字元變數,變數名為ch,並進行初始化
char str="abcd"; // 定義一個字元陣列,陣列名為str,並進行初始化
15樓:匿名使用者
例如:char a='a'; 這就是初始化
16樓:匿名使用者
直接複製 = "";就行了
17樓:匿名使用者
直接用 = 就能初始化
c語言中區域性變數初始化是什麼意思,怎麼初始化?
18樓:
「區域性變數初始化」是指在使用這個區域性變數前,要對其進行初始化。這是因為區域性變數是從記憶體堆中分配的,用完就還給記憶體堆,所以被分配的區域性變數並不一定是0,而很可能是其他地方用過的一個值,因此在使用這個變數之前,要對它進行顯示初始化。初始化可以用兩種方式(假設初值為0):
宣告變數是賦值:int val=0;
在使用前賦值:
int val;
.... //其它**
val=0;
....//後面開始使用變數val
19樓:恍然大悟
按作用域,c語言一般分為全域性變數和區域性變數。全域性變數一旦宣告就被預設初始化為適當型別的0,而區域性變數被宣告的時候其值是不可預料的,所以為了後續程式的正常使用,最好將其認為地初始化,否則有時會有災難性的後果!
第二個問題,例如:
int main()
20樓:
區域性變數就是在函式之類的地方定義的變數,只在本函式中才能使用,出去了就無效,初始化的意思就是給變數賦初始值
21樓:匿名使用者
比如是int =0;這個就是初始化呀
22樓:匿名使用者
在主函式外定義的變數為區域性變數,函式結束後,變數消失。
23樓:匿名使用者
c語言中區域性變數都需要定義,初始化,和使用。
比如void fun(),大括號裡面的內容就是區域性變數初始化
c語言中變數初始化與賦初值有什麼不同
語法上的初始化是指物件定義時,對應的分配空間之後對於值的操作。c語言中,靜態和全域性變數預設置0,有初始化列表的複製初始化列表的值到空間 如有不足,剩餘部分置0 區域性自動變數可以不初始化 偵錯程式參與時可能被隱式地初始化為其它的值 debug magic number 例如預設情況下microso...
在C語言中,為什麼定義變數的時候總是初始化為0呢?該怎麼理解
符潔愚媚 因為變數是可以變動的,定義一個變數不初始化時,變數會是一個隨機數,進行計算了的時候,就會引用那個隨機數進行計算,會有誤差。 如果全域性變數在定義時不初始化則初始值是0,如果區域性變數在定義時不初始化則初始值是不確定的。 沒字天書 誰說總是初始化0的,全域性變數和靜態變數會,區域性變數不一定...
c語言中變數的平方怎麼輸入,C語言中變數的平方怎麼輸入
天雲一號 在c 中,變數a的平方可以有2種方式進行輸入 1 直接本身相乘a a 2 用函式pow進行求變數a的平方,即pow a,2 注 函式pow的用法如下 函式格式 double pow double x,double y 功 能 計算x的y次冪 返 回 值 計算結果 當使用pow函式時,需要將...