元素型別角度:陣列是相同型別的變數的有序集合
記憶體角度:連續的一大片記憶體空間
//陣列元素的個數可以顯式或隱式指定
//陣列初始化可以使用或memeset兩種方式
void main()
; //隱式指定元素個數
int b[100] = ;//顯式指定元素個數
int c[200] = ; //編譯時就已經確定所有值為零
memset(c, 0, sizeof(c)); //顯式的重置記憶體塊資料
}
陣列首元素的位址和陣列位址是兩個不同的概念(如有陣列int a[10],陣列首元素的位址表示為陣列名a,陣列位址表示為陣列名取位址&a)
陣列名代表陣列首元素的位址,它是個常量(不能被修改,唯讀)
陣列首元素的位址和陣列的位址值相等(a和&a的值相同,但是步長不同)
int a[10];
printf("得到整個陣列的位址a: %d \n", &a);
printf("陣列的首元素的位址a: %d \n", a);
在c語言中可以使用typedef來重定義資料型別的名稱,對於陣列這種複雜的資料型別,c語言同樣提供了定義標準和規範。
typedef int (myarraytype)[5]; //定義了乙個陣列資料型別,這裡myarraytype = int [5]
int i = 0;
myarraytype myarray; //int myarray[5];
for (i=0; i<5; i++)
for (i=0; i<5; i++)
printf("myarray代表陣列首元素的位址 myarray:%d myarray+1:%d \n", myarray, myarray+1);
printf("&myarray代表整個陣列的位址 &myarray:%d &myarray+1:%d \n", &myarray, &myarray+1);
陣列指標就是指向整個陣列的指標型別,c語言提供了三種定義陣列指標型別的方法
1、第一種方法
typedef int(myarray)[5]; //自定義陣列型別
myarray a; //等價於int a[5]
myarray *p; //定義乙個指向陣列的指標變數p
p = &a; //把陣列a的位址賦給陣列指標p
for (int i = 0; i < 5; i++)
2、第二種方法
typedef int (*mypoint)[5]; //自定義乙個陣列指標資料型別,編譯器分配四位元組記憶體(32位下)
mypoint p;
int a[5];
p = &a;
for (int i = 0; i < 5; i++)
3、第三種方法(推薦)
前兩種方法都需要自己進行自定義型別,十分麻煩,因此c語言提供了一種可以直接定義陣列指標的方法。
int (*p)[5];//直接定義乙個陣列指標,注意與定義指標陣列的區別(int
*p[5]),的優先順序大於*
int a[5];
p = &a;
for (int i = 0; i < 5; i++)
C語言 陣列與指標高階(二)
c語言中能否靈活應用指標就能看出你的c語言功底如何,接下來是我對在學習指標過程中,對一下較為苦澀概念的理解及總結。指標的運算可歸納為以下三部分 1 指標 整數 一般來說,此類運算只是左右移動指標所指向陣列元素的位置而已 若指標指向的是 陣列名,此時其加1,則移動的是乙個陣列了,不是乙個元素 2 指標...
C語言指標陣列與陣列指標
初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...
C語言 陣列指標與指標陣列區別
陣列指標 也稱行指標 int p n 優先及高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。int a 3 2 int p 2 p a p 該語句執行後,也就是p p 1,p跨過a 0 指向了a 1 所以...