c語言高階 陣列型別與陣列指標

2021-08-20 14:47:59 字數 1759 閱讀 9840

元素型別角度:陣列是相同型別的變數的有序集合

記憶體角度:連續的一大片記憶體空間

//陣列元素的個數可以顯式或隱式指定

//陣列初始化可以使用或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 所以...