1樓:匿名使用者
你的書上好像錯了,所謂賦初值一般而言就是初始化啊從根本上說,其實初始化也並不是編譯階段完成,對於全域性變數(陣列)而言,一種是exe檔案中設定該程式的資料區中的為這個陣列存放空間中的值已經是初值了,當然這個值倒是編譯程式生成目標程式時設定的,程式執行載入時,給定空間中的內容直接拷貝到空間了,這個不佔執行時間(c++中則是程式載入到main函式執行之前完成的,這個也不佔執行時間)
對於自動區域性變數而言,原則上說,每次執行到該模組就會重新初始化一次,肯定是要佔用執行時間的,靜態區域性變數則第一次執行時才初始化一次,自然也會佔用執行時間
至於你用賦值語句設定所謂的初值,一定會佔用執行時間
2樓:
例1:初始化:
char str[8]= "12345678"
賦初值:
char str[8];//定義
char i;
for(i=0;i<8;i++)//賦初值//--------------------------------//
例2:int dat = 10; //初始化//-----//
int dat;
dat = 10; //賦初值
希望能對你的理解有所幫助!
3樓:工作服的
fsdfsdfsdfsxfsf
c語言中初始化陣列和給陣列元素賦值有什麼區別?
4樓:智者總要千慮
所謂賦初值一般而言就是初始化啊
從根本上說,其實初始化也並不是編譯階段完成,對於全域性變數(陣列)而言,一種是exe檔案中設定該程式的資料區中的為這個陣列存放空間中的值已經是初值了,當然這個值倒是編譯程式生成目標程式時設定的,程式執行載入時,給定空間中的內容直接拷貝到空間了,這個不佔執行時間(c++中則是程式載入到main函式執行之前完成的,這個也不佔執行時間)
對於自動區域性變數而言,原則上說,每次執行到該模組就會重新初始化一次,肯定是要佔用執行時間的,靜態區域性變數則第一次執行時才初始化一次,自然也會佔用執行時間
至於你用賦值語句設定所謂的初值,一定會佔用執行時間
5樓:太史付友慄茶
是未知值,或者都是0,根據編譯器不一樣而變化吧。可以,但是會帶來不可預計的後果。所以慎用
那你為什麼不對a先初始化一下,確保全0,防止不可預知問題的發生
6樓:匿名使用者
都是賦值:
初始化陣列是指第一次給陣列各元素賦值。
給陣列元素賦值指任何時候給陣列的一個或多個元素賦值。
c語言陣列的初始化表示方法
7樓:匿名使用者
c語言陣列的初始化表示方法有4種,分別是:
1、定義的同時進行初始化,我們同樣用陣列的初始化引出結構體的初始化,我們知道陣列在定義的同時進行初始化的**如下:
int nums = ;
由此可推出結構體在定義的同時進行初始化的**如下:
struct person p = ;
2、先定義再進行初始化,這種初始化方法其實昨天的內容裡已經寫過了,**如下:
struct person p;
p.name = "lee";
p.age = 23;
p.height = 1.8;
我們知道資料定義好後就不能對其進行一次性初始化了,比如如下**是編譯不通過的。
int nums[3];
num =
3、第三種結構體比較例外,它可以這樣做,只不過需要對其進行一下強制型別轉換,**如下:
struct person p;
p = (struct person)
4、指定將資料賦值給指定的屬性,陣列中我們見過這種寫法,**如下:
int nums[3] = ;
我們可以為不同的索引指定值,並不需要一定要按順序來,所以陣列可以,結構體是否可以呢,當然,**如下:
struct person p = ;
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語言中怎麼給陣列賦初值
11樓:匿名使用者
int a[5]=;
char b="abcdefg";
陣列定義時可以直接賦值初始化。
如果在定義之後,要麼通過迴圈語句一個一個賦值,要麼使用記憶體操作函式統一初始化。
12樓:雲散天濁
陣列賦值可以通過以下幾種方法:
1、定義的時候直接賦初值(用{});
2、用迴圈語句依次給陣列各元素賦值;
3、將陣列放在一個結構體裡面,通過結構體的引用給陣列整體賦值;(陣列本身不能直接整體賦值)
13樓:匿名使用者
可以使用迴圈語句,也可以使用memset()函式
14樓:俎州鮮于哲瀚
陣列賦值可以通過以下幾種方法:
1、定義的時候直接賦初值(用{});
例如:int array=
2、定義後再給陣列各元素賦值;
例如:int array[3];
for(int i=0;i<3;i++)
array[i]=i;
c語言中如何給陣列定義並賦初值?
15樓:我是果瘋
字串陣列定義
賦值:char c[6]=
整數陣列定義賦值:
int a[5]=;
int a[5];
for(int i=0;i<5;i++)
a[i]=i;
定義float陣列並賦值:
float b[10]=
16樓:匿名使用者
陣列賦值可以通過以下幾種方法:
1、定義的時候直接賦初值(用{});
例如:int array=
2、定義後再給陣列各元素賦值;
例如:int array[3];
for(int i=0;i<3;i++)
array[i]=i;
17樓:匿名使用者
int a[5]=;
型別名 陣列名[陣列長度] =;
18樓:人生2一首斷章
定義的時候直接賦值就好了例如char a[ ]=
19樓:匿名使用者
int aa;
c語言陣列的初始化表示方法
20樓:匿名使用者
在c語言中,陣列的初始化有以下幾種方式:
1、定義的時候同時初始化:
int array[10] = ;
2、定義的時候不指定陣列大小,由初始化的陣列元素來確定大小:
int array = ;
3、先定義變數,然後初始化.注意點:定義變數時必須制定陣列的大小.此時只能對陣列變數成員元素逐一賦值,不能批量賦值.
// int array; //錯誤用法
int array[12];
// array = ; //錯誤用法.
array[0] = 1;
array[1] = 2;
array[2] = 3;
4、只有一種情況,在作為方法的形式引數時,可以不指定陣列的大小.這時傳入方法的是陣列的首地址,所以在方法內部是無法得到陣列長度的,陣列長度必須作為引數傳入函式.
void test()
;int length = sizeof(array)/sizeof(int);
int result = sumofarray(array, length);
printf("%d",result);
}int sumofarray(int array, int length)
return result;
}擴充套件資料
c語言陣列構建:
1、遵循原則
申請的時候從外層往裡層,逐層申請;
釋放的時候從裡層往外層,逐層釋放。
2、構建所需指標
對於構建一維動態陣列,需要一維指標;
對於二維,則需要一維,二維指標;
三維需要一,二,三維指標;
依此類推。
參考資料
在C語言中,舉例說明如何開啟文字檔案,並讀入檔案中的資料
1.首先,使用vs構建一個新的空專案,然後直接單擊ok。2.單擊newitem選項為c編譯器建立一個新的c檔案,並輸入main.c檔案。3.然後建立一個新的返回c檔案,如下所示。4.將上面的參考 複製到main.c檔案中,並直接編譯它。5 編譯完成後,執行exe程式,執行後顯示txt檔案內容。第一,...
語言的作用是什麼語言的作用是什麼?舉例說明
第一,語言是人類最重要的交際工具。第二,語言是人類的思維工具。第三,語言是一定社會的產物,是社會特有的一種現象,社會以外無所謂語言,沒有社會,也就沒有語言,語言的發展受社會制約,語言隨著社會的產生而產生,隨著社會的發展而發展,隨著社會的死亡而死亡。第四,語言是社會成員相互聯絡的橋樑和紐帶,是相互溝通...
語言學概論請舉例說明劃分詞類的標準有哪些
y y n xu 語言bai學 漢du 語語言學 語zhi言理論 編輯語言學 linguistics 是dao以人類語言為研究物件的內學科,探索範圍包容括語言的性質 功能 結構 運用和歷史發展,以及其他與語言有關的問題。語言學被普遍定義為對語言的一種科學化 系統化的理論研究。並且語言是人類最重要的交...