C語言陣列

2021-09-11 17:57:29 字數 2382 閱讀 4101

由n個相同元素組成的一片連續的記憶體空間,通過下標運算子[n] 的方式去訪問(0 <= n < n-1)。如果n >= n那麼就會有可能出現越界的問題導致程式報錯退出,如果你剛好越界的位址沒有被其他程式使用,那就不會出錯,但一旦是被使用的,那就會出錯了,所以為了避免出錯就不要越界。用指標的說法就是指標操作非法記憶體。

一維陣列即是只有乙個組成的陣列。

定義方式:型別 變數名[常量表示式];如int a[10]; int b[4+6];

定義時初始化:陣列 = {}; 如int a[10] = ;初始化個數不足長度的時候,後面的元素編譯器會自動填0,所以等同於int a[10] = ;

訪問方式:下標訪問。如int a[10] = ; int b = a[2];

賦值方式:下標訪問賦值。如int a[10]; a[0] = 0; a[2] = 2;

二維陣列即是由兩個組成的陣列。可以理解成由n個一維陣列組成。

定義方式:型別 變數名[常量表示式];如int a[2][10]; int b[2][4+6];

定義時初始化:陣列 = ,...}; 如int a[2][10] = ,};初始化個數不足長度的時候,後面的元素編譯器會自動填0

訪問方式:下標訪問。如int a[2][10] = ,}; int b = a[1][2];

賦值方式:下標訪問賦值。如int a[10]; a[0] = 0; a[2] = 2;

不管是幾維陣列,都是由n個相同元素組成的一片連續的記憶體空間,定義成多維陣列只是為了方便操作(不用自己算間距)和理解,最主要是方便理解。主要用一維、二維、三維陣列,維數再大就難以理解了,因為我們大部分人都知道點(普通變數)、線(一維陣列,x座標軸)、面(二維陣列,xy座標軸)、立體(三維陣列,xyz座標軸)。

如下例子:

#include int main(void)

;//一維陣列,12個元素

int _2darray[3][4] = , ,};//二維陣列,3*4個元素

int _3darray[3][2][2] = ,} ,,} ,,}};//三維陣列,3*2*2個元素

printf("%p, %p, %p", lineararray, _2darray, _3darray);

printf("\n%d, %d, %d", lineararray[6], _2darray[1][2], _3darray[1][1][0]);//下標:1x4+2 = 6。 1x4+1x2+0 = 6

定義時靠近變數名的裡面可以不寫長度,但要初始化。

int a = ,//a為一維陣列,長度就為4。

//int c;//這寫法是錯誤。編譯器會報錯

int b[5] = ,};//b為二維陣列,長度為10(2x5),等同於int b[2][5] = ,};

//從上可以看出,不填長度,定義時就必須要把你要的長度的個數給初始化了

字串,實際就是char陣列。這篇文章有講關於字串的知識

void main()

; char s = "hello";//陣列長度6,字串長度5

system("pause");

}

陣列首位址。指標知識跳轉

void main()

;//a代表的是陣列的首位址(首元素的位址),其型別是int *。

//a的值等同於&a,等於&a[0],都是首位址,但其對應的型別不同,a和&a[0]都是int *,&a是int (*)[10]。如果只需要首位址,這三種方式都可以。

//&a = 0; //&a其實是乙個位址,型別是int (*)[10] , 位址是常量,常量是不能做左值的。比如陣列a[10]的首位址是0x1234,那麼&a就是代表0x1234,所以0x1234=0是不對的。

//正確操作應該如下

a[0] = 0

int b[2][2] = };

//b的值等同於&b,等於&b[0],等於&b[0][0],都是首位址,但其對應的型別不同,b和&b[0]是int (*)[2],&b是int (*)[2][2],&b[0][0]是int *。

system("pause");

}

變長陣列,並不是所有ide(如vs並不支援)都支援這樣的寫法。不推薦這樣使用,建議使用動態記憶體分配。

int n = 10;

int a[n];

c語言陣列

陣列 構造資料型別之一 陣列是具有一定順序關係的若干個變數的集合,組成陣列的各個變數稱為陣列的元素。陣列中各元素的資料型別要求相同,用陣列名和下標確定。陣列可以是一維的,也可以是多維的。在科學計算中,許多重要的應用都是基於陣列的。所謂一維陣列是指只有乙個下標的陣列。它在計算機的記憶體中是連續儲存的。...

C語言陣列

在變數作函式引數時,所進行的值傳送是單向的。即只能從實參傳向形參,不能從形參傳回實參。形參的初值和實參相同,而形參的值發生改變後,實參並不變化,兩者的終值是不同的。而當用陣列名作函式引數時,情況則不同。由於實際上形參和實參為同一陣列,因此當形引數組發生變化時,實參陣列也隨之變化。當然這種情況不能理解...

C語言 陣列

陣列 void test1 for int i 0 i 5 i for int i 0 i 5 i 陣列資料倒序存放 void test2 printf 請輸入5個學生的成績 n for int i 4 i 0 i printf 輸出5個學生的成績 n for int i 0 i 5 i 將陣列的長...