目錄
陣列是一種相同型別元素的集合
#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 宣告陣列 宣告時不需要指定陣列的大小只有在實際建立陣列例項的時候,才需要指定陣列的大小...