C語言從零開始 day3(陣列初識)

2021-08-14 07:48:53 字數 2489 閱讀 7030

第三節

####   認識陣列   ####

int arr[5] = ,i = 0; //整型陣列,完全初始化

//int表示該陣列為整形陣列

//是乙個運算子,專用於陣列,優先順序很高

//arr[0]:表示首元素的變數名

//元素的變數名(不是陣列名)在左值和右值代表的意義不同。具體:作為左值時,表示改變該元素名;作為右值時,表示用該元素名賦值。

//例如:arr[5] = 5; a = arr[5]

//int arr[5] = ;//該定義表明:第三個元素名為5,其餘初始化為0

//如果只是單純定義乙個陣列,int arr[5]; 該過程無初始化

//陣列是連續儲存在記憶體中的一種資料結構,是順序表

while(i < 5) //遍歷陣列

####   考慮「陣列名」問題   ####

#include int main(void)

; //arr為陣列名,在編譯器看來,arr是陣列元素的首位址

//考慮問題:陣列名可以是左值,右值嗎?

//解答:陣列名不能是左值;原因1,沒有絕對的相關變數型別與之匹配;原因2,陣列名在編譯器看來是位址,位址為常量,常量不可更改

int a = 3;

//左值:代表可以儲存資料的記憶體空間

//右值:代表空間裡的內容

return 0;

}

注意乙個易犯錯問題:

int num = 5;

int arr[num] = {}; //這是錯誤的寫法!注意:陣列大小必須為常量,不能是變數

####   陣列越界問題   ####

int arr[5] = ,i = 0;

for (i=0;i<6;i++) //注意:i=5時,已經越界。

//越界後,會發現測試列印出來的越界位的數值是隨機的,這也進一步說明,棧是髒的

//注意:陣列越界,編譯器不會檢查出來! 陣列的越界問題,編譯器對陣列不進行邊界檢查,這樣可以提公升程式的執行效率,但降低了安全性。

####   字元形陣列中的asc值   ####

#include //問題:定義的buf1和buf2表示的意義一樣嗎?

//考慮問題:1,整個過程中i的變化歷程。2,陣列有沒有越界?3,if+else結構,能否證明我們的預期列印情況

int main(void)

; char buf2[3] = ;

int i = 3,flag = 0;

while (i--) //i的遍歷:3-->2;2-->1;1-->0;0-->-1(這次不進入迴圈)

}printf("check flag 2 i = %d \n",i);  //這塊檢查,上面while後i的值的結果

if (!flag)

printf("right!!! \n");

else

printf("error!!! \n");

printf("test enter");

putchar('\n');  //這表明傳入的引數是10,對應的asc碼是10,把這個字元輸出》到輸出裝置,也是換行的意思

}

上面**證明:buf1和buf2表示的意義一樣;體會char型別中字元和對應asc碼值的對應關係

####   區分0 '\0' '0'   ####

//字串進行初始化時,字串結尾需要乙個'\0',作為結束標誌

//理解:0 『\0』 和'0'之間的區別

//0是數字

//'\0'是乙個字元(空字元),佔記憶體空間乙個位元組大小,對應的asc碼值是0,'\0' == 0

//'0'是字元0,對應的asc碼是48

char buf1 = "abc";

char buf2 = ;

//考慮,這兩個陣列有什麼不同

//結論:buf1佔據四位元組大小,buf2佔據三位元組大小

if(sizeof(buf1) == sizeof(buf2))//該if+esle結構用來判斷兩個陣列是否一樣》(在佔據空間大小上都不一樣)

puts("== \n");

else

puts("!= \n");

####   關於'\0'的運用   ####

char buf = "12345";

printf("buf = [%s] \n",buf);  //輸出結果為12345

printf("sizeof(buf) = %d \n",sizeof(buf)); //輸出結果為6

//strlen函式:計算字串中有效字元個數

printf("strlen(buf) = %d \n",strlen(buf)); //輸出結果為5

C語言從零開始 const初識

const是什麼 const 用於修飾變數,表示該變數是唯讀的,不可修改 在c 裡,引申了這個用 法,表示常量 include int main void const 在乙個表示式中到底修飾誰?const修飾的是誰?由下面的例子可以得到結論 const修飾變數時,遵循就近原則 include int...

C語言從零開始 memory初識

1,棧段記憶體 1,棧段記憶體 函式一旦呼叫結束,就釋放所有內部棧記憶體。宣告週期是臨時的。作用域只在花括號內 include int func void int main void 2,堆段記憶體 堆段記憶體 自己申請,自己釋放。宣告週期伴隨整個程式 沒有被釋放 作用域 建立後一直可以使用 沒有被...

從零開始學習c語言

including 進行相關的預處理操作 include稱為檔案包含命令 而 中為頭部檔案 首檔案 int main int 是c語言基本資料型別之一,main函式是乙個程式的入口部分,printf hello,world n printf是產生格式化輸出的函式 輸出函式 想控制台輸出文字 字元,n...