陣列型別和多維陣列本質

2021-08-18 23:41:24 字數 1842 閱讀 3652

 1)元素型別角度:陣列是相同型別的變數的有序集合 測試指標變數占有記憶體空間大小

 2)記憶體角度:聯絡的一大片記憶體空間

陣列初始化

陣列元素的個數可以顯示或隱式指定, 分析陣列初始化與memset比較。

與memset 耗時差不多,但 可能有移植性問題,雖然絕大多數編譯器看到 都是將陣列全部初始化為0, 但是不保證所有編譯器都是這樣實現的;推薦使用memset方法。

陣列名的技術盲點

 1)陣列首元素的位址和陣列位址是兩個不同的概念

 2)陣列名代表陣列首元素的位址,它是個常量。

 解釋如下:變數本質是記憶體空間的別名,一定義陣列,就分配記憶體,記憶體就固定了。所以陣列名起名以後就不能被修改了。

 3)陣列首元素的位址和陣列的位址值相等

 4、怎麼樣得到整個一維陣列的位址?

c語言規定:

int a[10];

printf(「得到整個陣列的位址a: %d \n」,&a);

printf(「陣列的首元素的位址a: %d \n」,a);

陣列型別

 1資料型別分為基礎、非基礎,思考角度應該發生變化

 2 c語言中的陣列有自己特定的型別

 陣列的型別由元素型別和陣列大小共同決定

 例:int array[5]的型別為int[5]

typedef int(myint5)[5];   //int

typedef float(myfloat10)[10];

陣列定義:

myint5i array; int array[5];

myfloat10farray

陣列指標型別

 陣列指標用於指向乙個陣列。

定義陣列指標 有三種

1)通過陣列型別定義陣列指標:

typedef int(arraytype)[5]; int *a

arraytype* pointer;

//for (i=0; i<5; i++)

}

2) 宣告乙個陣列指標型別

typedef int (*mypointer)[5];

mypointer mypoint;

//for (i=0; i<5; i++)

}

3)直接定義:int (*pointer)[n];

pointer 為陣列指標變數名

type 為指向的陣列的型別

n 為指向的陣列的大小

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

}

void main222()

char cbuf[30]; // cbuf(1級指標) 代表陣列首元素的位址。&cbuf(二級指標) 代表整個陣列的位址.

char array[10][30]; //array是二級指標

array 二維陣列的首位址

(array+i) //相當於 整個第i行的陣列位址 //二級指標 &cbuf

(*(array+i))//一維陣列的首位址 cbuf

(*(array+i))+j //相當於第i行第j列的位址《==》&array[i][j]

*((*(array+i))+j) //相當於第i行第j列的值<====>array[i][j]

陣列 多維陣列本質和字元陣列語法

初學c語言,記錄一下學習過程。引入陣列的原因 要宣告很多變數 程式冗長 可擴充套件性差 陣列必須先定義,後使用 只能逐個引用陣列元素,不能一次引用整個陣列 int a 5 a 4 10 可以沒初始化陣列就對其中的乙個元素賦值 但不能a 5 10,這樣就越界了。排序的應用例項 待補充 多維陣列本質是一...

多維陣列本質小結

include stdio.h include stdlib.h include string.h void main33 1 myarray陣列首元素的位址吧 2 myarray是乙個常量指標 3k 3 myarray是乙個陣列指標 int myarray 3 5 直接定義乙個陣列指標 int p...

多維陣列(陣列型別,陣列指標,陣列指標型別)

陣列 int myarray100 myarray是陣列首元素位址,myarray 1 步長是四個位元組 sizeof int myarray是整個陣列的位址,myarray 1 步長是100 sizeof int 400個位元組 typedef int myarraytype 100 myarra...