C語言 array陣列的用法詳解

2022-09-24 09:21:11 字數 3085 閱讀 1736

目錄

陣列是一種相同型別元素的集合

#include

#include

int main()

;不完全初始化,剩下的元素預設初始化0.

char arr2[5];

初始化 char arr[5]=;,不完全初始化,剩下元素預設初始化0.

初始化 char arr[5]="ab" 這是可行的,因為隱藏乙個'\0',後面的0使我們自己給的(這個字串都給給它的==),不是系統預設

int n = 5;

char ch[n]; 這樣建立陣列是錯誤,因為n還是變數,值是被賦值了,並不會改變它的屬性

char arr3[5] = ;//可行

上式等價於下式

char arr3[5] =

char arr4 = "abcd";//加上後面隱藏的'\0',大小為5

當我們並沒有指定大小的時候,它會根據後面的資料,自己給定大小

char arr5 = "abcdef";

printf("%d\n",sizeof(arr5));// 7 sizeof暈倒'\0',把它算進去,在停止計算

printf("%d\n", strlen(arr5));//6 strlen是遇到'\0'(不包含),就停止計算

char arr6 = ;

printf("%d\n",strlen(arr6));//如果沒有'\0'結束標誌符,它會一直算個數,直到遇到'\0',輸出的是乙個隨機數

printf("%d\n", sizeof(arr6));//沒有'\0'它就少算乙個就是3

return 0;

}#include

#include

int main()

return 0;

}#include

int main()

; int sz = sizeof(arr) / sizeof(arr[0]);

// sizeof(陣列名)計算的整個陣列的位元組大小,我們只要再求乙個元素的大小就可以了,因為 陣列是一群相同型別資料的集合,所以我

// 假設 int a[10]; 陣列 a 有 10個 int(4byte) 型別的元素,整個陣列的大小就是 4*10 == 40 byte, 陣列大小除以陣列元素大小,不就是陣列元素個數嘛。(40/4 == 10)

int i = 0;

for (i = 0; i < sz; i++)

return 0;

}#include

int main()

;假設 資料 是這樣存的,在記憶體是連續儲存的12345000.....

1234

5000

0000

int arr2[3][4] = , };

1 2 3 0

4 5 0 0

0 0 0 0

一行的資料 是根據元素加個後面的,方便你們去區分,再根據列數確定 一行有多少個元素

int arr3[4] = , };

1 2 3 0

4 5 0 0

二維陣列不管行還是列,下標都是從0開始,而且 二維陣列的 行 是可以省略的,它會根據 元素 和 列的值,來確定行數

int arr4[3][4] = , };

int i = 0;

for (i = 0; i < 3; i++)

printf("\n");

}return 0;

}在記憶體中實際儲存情況,第一行完了,第二行緊跟在第一行,第三行緊跟在第二行,int a[2][2]=, 在記憶體中儲存情況為 1 2 3 4 (小端)

因為 陣列的首元素位址是最小的,後面元素,位址依次增大(大約增大 乙個元素的型別的位元組大小)

#include

int main()

, };

int i = 0;

for (i = 0; i < 3; i++)

}return 0;

}#include

void bubble_sort(int arr,int sz)

}if (1 == flag)

}}程式設計客棧

int main()

; int i = 0;

int sz = sizeof(arr) / sizeof(arr[0]);

bubble_sort(arr,sz);

對陣列arr進行傳參,傳遞的是陣列arr首元素的位址

for (i = 0; i < sz; i++)

return 0;

}#include

int main()

;//陣列隨著下標的增長,位址是由低到高變化點

printf("%p\n",arr);

陣列名就是陣列首元素位址,是一樣的。見附圖1

printf("%p\n",&arr[0]);

但有兩個意外

1.sizeof(陣列名) - 陣列名表示整個陣列 ,計算的是整個陣列的大小,單位為位元組(byte)

int sz = sizeof(arr);

printf("%d\n",sz);// 4(元素大小)* 7(元素個數)== 28,效果見附圖 2

2.&(陣列名),陣列名代表整個陣列,&陣列名,取的是整個陣列的位址

printf("%p\n", &arr);//表示陣列的起始位址,是整個陣列的位址

上下兩者的值一樣,但 意義完全不同,效果圖 見附圖 3

printf("%p\n", arr);//首元素的位址

//進一步論證 &arr 和 arr的意義完全不同,不同在**

printf("%p\n", &arr+1);//位址增加28位元組,乙個元素4byte,7個元素28位元組,意味著 &arr + 1 跳過一整個陣列的元素,指向最後乙個元素後面的位址

printf("%p\n", arr+1);//位址增加4位元組,意味著 arr +1,跳過乙個元素,改位址 arr+1,指向第二個元素

效果見附圖 4

return 0;

}關於陣列名,有興趣的,可以看看我這篇文章指標和陣列試題解析(重置版)

附圖1;

附圖2:

附圖3:

附圖4:

本文結束

Array 陣列物件的基本用法

陣列物件是乙個物件的集合,裡邊的物件可以是不同型別的。陣列的每乙個成員物件都有乙個 下標 用來表示它在陣列中的位置,注意 位置 是從零開始的。陣列的定義方法 var 陣列名 new array 這樣就定義了乙個空陣列。以後要新增陣列元素,就用 陣列名 下標 注意這裡的方括號不是 可以省略 的意思,陣...

C 中的陣列(array)

陣列是乙個無序的元素序列。陣列元素儲存在乙個連續性的記憶體塊中,並可使用乙個整數索引來訪問。宣告陣列變數時,陣列的大小不是宣告的一部分。int dogs 宣告陣列 宣告時不需要指定陣列的大小只有在實際建立陣列例項的時候,才需要指定陣列的大小。建立陣列例項時編譯器預設將陣列元素初始化為0,null,f...

C 中的陣列(array)

原文 c 中的陣列 array 陣列是乙個無序的元素序列。陣列元素儲存在乙個連續性的記憶體塊中,並可使用乙個整數索引來訪問。c 宣告陣列變數時,陣列的大小不是宣告的一部分。這點與c c 有些區別。int dogs 宣告陣列 宣告時不需要指定陣列的大小只有在實際建立陣列例項的時候,才需要指定陣列的大小...