32 陣列指標和指標陣列分析

2021-08-18 01:39:28 字數 2518 閱讀 9489

指標的本質是變數,其記憶體中儲存的值是另乙個變數或常量的記憶體位址。

int array[5];

int matrix[3][3];

int* pa = array;

int* pm = matrix;

合法,第乙個為標準陣列的定義,第二個為二維陣列的定義,第三個為指向陣列的指標,第四個為指向二維陣列的指標。

問題:(1)array代表陣列首元素的位址,那麼matrix代表什麼?(2)array和&array的位址值相同,但意義不同,那麼它們所代表的型別相同嗎?c語言中的陣列有自己特定的型別,由元素型別陣列大小共同決定;如:int array[5] 的型別為 int[5]。

c語言中通過typedef為陣列型別重新命名:

typedef

type

(name)[size];

例如:

-陣列型別:

typedef int(aint5)[5];

typedef float(afloat10)[10];

-陣列定義:

aint5 iarray;

afloat10 farray;

(1) 陣列指標用於指向乙個陣列

(2)陣列名是陣列首元素的起始位址,但並不是陣列的起始位址

(3)通過取位址符&作用於陣列名可以得到陣列的起始位址;

(4)可通過陣列型別定義陣列指標:arraytype* pointer;

(5) 也可以直接定義: type(*pointer)[n];

pointer 為陣列指標變數名;type為指向的陣列的型別;n為指向的陣列的大小。

#include 

typedef

int(aint5)[5];

typedef

float(afloat10)[10];

typedef

char(achar9)[9];

int main()

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

printf("%p, %p, %p\n", &carray, pc+1, pcw+1); // pc + 1 ==> (unsigned int )pc + 1 * sizeof(*pc) ==> (unsigned int)pc + 9

return

0;

}

輸出結果:

20, 20

0.000000

1.000000

2.000000

3.000000

4.000000

5.000000

6.000000

7.000000

8.000000

9.000000

0xbfef0163, 0xbfef016c, 0xbfef0167

(1)指標陣列是乙個普通的陣列(2)指標陣列中每乙個元素為乙個指標(3) 指標陣列的定義:type* parray[n];

type*:為陣列中每個元素的型別(帶有*,可知是乙個指標型別)

parray:為陣列名

n:陣列大小

0;}輸出結果:

4

-1

(1) 陣列的型別由元素型別陣列大小共同決定;

(2)陣列指標是乙個指標,指向對應型別的陣列;陣列指標遵循指標運算法則;

(3)指標陣列是乙個陣列,其中每個元素都是指標;指標陣列擁有c語言陣列的各種特性。

C 32 陣列指標和指標陣列分析

思考 下面這些宣告合法嗎?int array 5 int matrix 3 3 int pa array int pm matrix 例 int array 5 的型別為 int 5 陣列型別 typedef int aint5 5 typedef float afloat10 10 陣列定義 ai...

指標和陣列分析(上)

陣列是一段連續的記憶體空間 陣列的空間大小為sizeof arrary type arrary size 陣列名可看做指向陣列第乙個元素的常量指標 a 1的意義是什麼?結果是什麼?指標運算的意義是什麼?結果又是什麼?1 include 2 intmain 3 5int p null 6 printf...

C語言學習筆記19 陣列指標和指標陣列分析

在c語言中 c語言中通過typedef為陣列型別重新命名 typedef int aint5 5 重新命名 aint5 iarray 定義 typedef float afloat10 10 重新命名 afloat10 farray 定義 注 pointer為陣列指標變數名 type為指向的陣列的元...