春蠶到死絲方盡,人至期頤亦不休,
一息尚存須努力,留作青年好范疇,
——吳玉章
Array
- 一維陣列
- 1. int 型別
- 2. char 型別
- 二維陣列
- 1. 完全初始化
- 2. 不完全初始化
- 3. 可省略ROW的初始化
- 4. 還有一種不知名初始化
- ??注意事項
- 1. 用指標的方式對二維陣列進行列印
- 2. 用指標的方式對二維陣列進行列印
一維陣列
I 一維陣列在記憶體中是連續存放的
II 隨著陣列下標的增長,地址是由低到的高變化
1. int 型別
??注意事項:
一維陣列中的大小,只能放常量運算式,盡量不要用變數,放了變數可能會報錯,因編譯器而定
下圖使用變數,可以看到是不能在陣列中初始大小

2. char 型別
?? char type注意事項 1:
陣列中如果手動給陣列分配5個大小空間,
char sentence[11] = "helloworld";
printf("Length : %d\n", sizeof(sentence)/sizeof(char) ); //return 11
反斜杠0我們看不到, 在存盤中,占空間大小為11
反過來如果是
char sentence[10] = "helloworld";
那么\0不會自動加入進去,就會導致helloworld后面有亂碼,列印出來為隨機值,如下圖所示
?? char type注意事項 2:
下面一種是char type初始化的第二種形式
char wd1[] = “haha”; //列印出來長度為4
char wd2[] = {‘h’, ‘a’,‘h’, ‘a’}; //列印出來為隨機值,因為沒\0,呼叫strlen函式不知道什么時候停
二維陣列
1. 完全初始化
int arr[3][4] = {1,2,3 , 4, 5,6 ,6,7,8 , 1,1,1}
2. 不完全初始化
剩余的空間用0來補齊,如果是char型別的補的是\0
int arr[3][4] = {1,2,3,4,5}
3. 可省略ROW的初始化
注意COL不能省略
int arr[ ][4] = { {1,2} , {3,4}, {5,6} };
4. 還有一種不知名初始化
int arr[3][4] = { {1,2} , {3,4}, {5,6} };

我們可以看到記憶體空間中,COL為4,剩余沒有添加的值補0
??注意事項
1. 用指標的方式對二維陣列進行列印
int arr[][4] = { {4,4} , {3,3} , {1,1} };
int* p = &arr[0][0]; //這里是首元素地址,也可用&arr
for(int i=0; i<12; i++){
printf(“%d ” ,*p );
p++;
}
2. 用指標的方式對二維陣列進行列印
陣列名是陣列首元素的地址,但有兩個例外:
1. sizeof(陣列名) ,這里表示整個陣列的大小,單位是位元組byte
2. &陣列名,表示整個陣列,取出的是整個陣列的地址
我們可以舉個🌰
int arr[] = {9,5,4,4};
printf("%p \n", &arr); //取的是整個地址 0x7ffee4a219c0
printf("%p \n", &arr+1); //驗證 0x7ffee4a219c0 + 0x16 = 0x7ffee4a219d0
printf("%p \n", arr); //和&arr取地址一樣,指向首元素地址 0x7ffee4a219c0
printf("%p \n", arr+1); //指向這個陣列中的下一個 0x7ffee4a219c0 + 0x04 = 0x7ffee4a219c4
第一個列印出來的地址為0x7ffee4a219c0
&arr取的是整個地址,為了進行驗證,我們知道arr大小為16bytes, 那么
0x7ffee4a219c0 + 16bytes = 0x7ffee4a219d0
而arr+1,是基于首元素向后移動4bytes

如果對你有幫助,一鍵三連Thank U 😃
My Gitee: https://gitee.com/keep_going_henry.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/281672.html
標籤:其他
