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...