C語言賦值和初始化的區別,c語言賦值中什麼叫初始化賦值,和賦值有什麼區別嗎

2022-03-09 06:54:58 字數 5419 閱讀 6979

1樓:左丘南晴建忍

在定義了一個變數後就會給變數分配一個地址,但不會自動賦值,只有執行的時候,若變數依然沒有賦值,結果要使用此變數的時候會隨機賦值。

2樓:盤祺然齊萍

定義一個某型別的變數,系統就會給它分配一個地址,大小就是這個型別的大小。如果你沒初始化,系統中這個變數指向的地址裡邊可能以前已經存了一個數,這個數是多少?未知的。

所以說變數定義時候要有初始化的習慣。如果是指標的話不初始化會出亂子的。賦值就是講一個變數的值或者一個值。

賦給另一個變數

3樓:小肖百事通

回答稍等哦,親親

給變數賦值的時候,一般的格式如下:

變數名 = 表示式;

例如:int a;

a = 1 + 2;

也可以連續給多個變數賦值,格式如下:

變數名1 =變數名2 = ... =變數名n = 表示式;

例如:int x, y, z;

x = y = z = 100;

等價於:

z = 100;

y = z;

x = y;

分析:使用資料型別定義一個變數,而且在定義變數的時候,給其設定初始值。

提問初始化呢?

回答希望對您有幫助哦,親親

其中,var_list是需要初始化的變數列表。

這三個方法都可以哦,親親

更多18條

4樓:匿名使用者

初始化是程式在執行前由系統將變數值進行賦值,而賦值是在程式開始執行之後完成,賦值動作屬於程式完成

int a;這個屬於變數定義且不做初始化

int a=1;這個屬於系統初始化,系統首先申請變數a,並且將這個單元放置初始值1

int a; a=b;屬於程式中的賦值,程式執行時取變數b中的值放入a,並沒有初始化的內容在內

5樓:

誰和你說 int a;是初始化? 這是宣告變數

宣告變數的時候同時賦值,叫初始化

賦值就是 變數 = 某個值;

6樓:匿名使用者

語法上的初始化是指物件定義時,對應的分配空間之後對於值的操作。c語言中,靜態和全域性變數預設置0,有初始化列表的複製初始化列表的值到空間(如有不足,剩餘部分置0),區域性自動變數可以不初始化(偵錯程式參與時可能被隱式地初始化為其它的值("debug magic number"),例如預設情況下microsoft c/c++ debugger會把棧中未初始化的位元組置為0xcc)。

賦初值一般而言是指邏輯意義上的初始化。在c語言中,由於初始化的語法是「=」後加初值,所以「賦初值」基本上就是指語法上的初始化。不過隨著語言的發展,「賦初值」的意義發生了擴大。

對有構造語義但又允許不初始化而不產生編譯錯誤的程式設計語言而言,兩者有些微妙的差別。例如c++的建構函式中,用若干個成員名和括號括起來的初始化值構成的初始化列表是語法上的初始化(也可能是邏輯意義上的初始化,如果沒有被建構函式體內的值覆蓋),而建構函式體中對成員的賦值語句是邏輯上的初始化但不是語法上的初始化。

冰的悸動 錯誤:

1.「程式開始時進行初始化」的說法僅僅適用於靜態或全域性變數,而不適於區域性自動變數。區域性自動變數在函式呼叫時才能被初始化。

2.「但是根據編譯器的不同有些編譯器會自動賦初值0或其他」——這在iso/iec c語言標準中不是由實現定義的行為,如果一個編譯器符合標準,那麼行為就是明確的,即視此初始化的物件是否為全域性物件來判斷隱式初始化置0還是不進行初始化——從下面的函式定義來看這裡應該var2是全域性變數,會被置0。非標準編譯器則另當別論(但是我還沒見過會在這點上沒事找茬的)。

c語言賦值中什麼叫初始化賦值,和賦值有什麼區別嗎

7樓:

初始化賦值是在定義的時候賦值,如int i=5;

對於陣列來說初始化賦值和其他時候賦值方式是不同的。

c語言中變數初始化與賦初值有什麼不同?

8樓:匿名使用者

語法上的初始化是指物件定義時,對應的分配空間之後對於值的操作。c語言中,靜態和全域性變數預設置0,有初始化列表的複製初始化列表的值到空間(如有不足,剩餘部分置0),區域性自動變數可以不初始化(偵錯程式參與時可能被隱式地初始化為其它的值("debug magic number"),例如預設情況下microsoft c/c++ debugger會把棧中未初始化的位元組置為0xcc)。

賦初值一般而言是指邏輯意義上的初始化。在c語言中,由於初始化的語法是「=」後加初值,所以「賦初值」基本上就是指語法上的初始化。不過隨著語言的發展,「賦初值」的意義發生了擴大。

對有構造語義但又允許不初始化而不產生編譯錯誤的程式設計語言而言,兩者有些微妙的差別。例如c++的建構函式中,用若干個成員名和括號括起來的初始化值構成的初始化列表是語法上的初始化(也可能是邏輯意義上的初始化,如果沒有被建構函式體內的值覆蓋),而建構函式體中對成員的賦值語句是邏輯上的初始化但不是語法上的初始化。

冰的悸動 錯誤:

1.「程式開始時進行初始化」的說法僅僅適用於靜態或全域性變數,而不適於區域性自動變數。區域性自動變數在函式呼叫時才能被初始化。

2.「但是根據編譯器的不同有些編譯器會自動賦初值0或其他」——這在iso/iec c語言標準中不是由實現定義的行為,如果一個編譯器符合標準,那麼行為就是明確的,即視此初始化的物件是否為全域性物件來判斷隱式初始化置0還是不進行初始化——從下面的函式定義來看這裡應該var2是全域性變數,會被置0。非標準編譯器則另當別論(但是我還沒見過會在這點上沒事找茬的)。

9樓:冰的悸動

所謂初始化,就是指系統(程式)起始狀態時,各種引數(變數)應該取什麼樣的值,因為系統在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的標準也好,都也在不斷的更新。

所以我認為我上面的說法也並沒有什麼錯誤。

10樓:匿名使用者

c語言中應該沒有區別吧,在物件導向的程式設計語言中往往會有區別。

c語言中初始化賦值和用#define命令對一個字元賦值有什麼異同

11樓:回憶在上輩子

一個是賦值一個是巨集替換

int r這個r是個變數,其值可變

而#define r這個r是個巨集,在函式中有用到時會用後面的數值進行替換,不能夠改變其值

12樓:匿名使用者

前者存在變數r,後者不是變數,編譯前就被替換成數12了

13樓:匿名使用者

前者是變數賦值,變數r佔記憶體,後者是巨集定義,r不佔記憶體,是預編譯的,只是下面如果出現r都會替換成12

14樓:

int r=12定義的是變數,#define r 12是通過巨集定義了一個常量,常量值在程式中是固定不變的

15樓:匿名使用者

int r =12;

用int 關鍵字 的r 是一個變數,就是r的值現在是12但是當 我們在寫一條語句r =24的時候,此時

r的值就變成了24 而對於用#define r 12 這個定義的r 就是一個常量,就是不能改變的 ,這個#define

定義巨集 常量 一般放在程式的開頭,所以此時的r 也是一個全域性的哈,一般用#define 定義的常量都是

用大寫的英文字母。 好久沒有摸過c語言了,所以不是很準確,、但是你可以參考參考,希望對你有幫助!

16樓:匿名使用者

1、定義需要分配儲存空間

2、初始化是定義變數時候賦給變數的值;

3、賦值是以後用到該變數,賦給該變數新的值;

定義是在記憶體中確定變數的位置、大小。初始化是定義變數時候賦給變數的值(從無到有).賦值是以後用到該變數,賦給該變數新的值.

int i;//定義

int i=9;初始化

i= 7;// 賦值

17樓:

初始化賦值可以改變值

define命令不可以改變

18樓:

1個有地址,1個沒地址?

c語言中初始化陣列和給陣列元素賦值有什麼區別?

19樓:智者總要千慮

所謂賦初值一般而言就是初始化啊

從根本上說,其實初始化也並不是編譯階段完成,對於全域性變數(陣列)而言,一種是exe檔案中設定該程式的資料區中的為這個陣列存放空間中的值已經是初值了,當然這個值倒是編譯程式生成目標程式時設定的,程式執行載入時,給定空間中的內容直接拷貝到空間了,這個不佔執行時間(c++中則是程式載入到main函式執行之前完成的,這個也不佔執行時間)

對於自動區域性變數而言,原則上說,每次執行到該模組就會重新初始化一次,肯定是要佔用執行時間的,靜態區域性變數則第一次執行時才初始化一次,自然也會佔用執行時間

至於你用賦值語句設定所謂的初值,一定會佔用執行時間

20樓:太史付友慄茶

是未知值,或者都是0,根據編譯器不一樣而變化吧。可以,但是會帶來不可預計的後果。所以慎用

那你為什麼不對a先初始化一下,確保全0,防止不可預知問題的發生

c語言中賦值

b a,b中的值是5,a中的值還是5,要是寫a b,由於b沒有賦予初值,編譯器可能報錯或者a被賦予一個隨機值!int a,b a 5 b a,這時候 a 和 b 都等於 5。int a,b a 5 a b,由於 b 為賦值,所以 a 和 b 的值都不確定。int a,b a,b中均是隨即數a 5 a...

C語言for迴圈賦值問題,C語言中用for迴圈賦值陣列

在第一次迴圈以後,漏掉了將j清零的操作,這樣在i 1與i 2時,j 4,不會進入輸出的第二級迴圈 c語言中用for迴圈賦值陣列 include main a 0 到a 9 這10個數依次賦值0到9for i 0 i 10 i a i i a 20 到a 29 這10個數全部賦值成9for i 20 ...

C語言判斷正誤。。賦值的問題,C語言 判斷直接賦值問題

char s 定義一個字元類指標 s olympic s指向的是字串 olympic 裡的第一個字元 o s可理解為字串 第二句若改成指向字元類指標的指標就可以正確賦值了,如下 char s s 這樣的s可理解為指向字串的指標,也可以理解為二維陣列 可以這麼理解第二句 char s 定義一個字元型指...