C語言複習(十五) 陣列指標和指標陣列

2021-06-22 12:12:54 字數 2878 閱讀 4919

看如下**:

int array[5];

int matrix[2][3];

int* pa=array;

int* pb=matrix;

思考問題:

都知道,一位陣列名array

代表陣列首元素位址,那麼二維陣列名

matrix

代表什麼?也是首元素位址麼?

array和

&array

的值相同,它們的意義不同,表現在它們的指標運算方式不同,為什麼會有不同?指向它們的指標型別相同嗎?

要回答第乙個問題,必須要簡單回顧一下二維陣列;

定義方式:

型別說明符 陣列名[

常量表示式

][常量表示式

];

例如:int matrix[2][3];

表示定義了乙個2行

3列存放整型資料的陣列;

c語言中對二維陣列採用這種定義方式,使得二維陣列可被看作是一種特殊的一維陣列,即是這個一維陣列的每乙個元素又是乙個一維陣列;

如下int matrix[2][3]

的**:

首先把matrix

看作乙個一維陣列,它有兩個元素:

每個元素又是乙個包含3

個元素的一維陣列:

儲存方式:

c語言中,二維陣列中的元素排列順序是按行存放的,即在記憶體中先順序存放第一行的元素,接著再存放第二行的元素。

從二維陣列的角度看,matrix

確實也代表二維陣列首元素的位址,而現在首元素的位址不是乙個簡單的整型元素,而是由

3個整型元素所組成的一維陣列;因此,

matrix

代表的是首行元素的首位址,它是首行

3個元素所在記憶體這一整體的首位址,雖然在值上和

matrix[0][0]

元素的位址相同,但是意義不同;如果此時

matrix+1

,則表示

matrix第1

行元素的首位址;

c語言中,陣列有自己特定的型別,這個型別由元素型別和陣列大小共同決定;

例如:int array[5]

的型別為

int[5]

實際上本質的原因是array

與&array

所屬的指標型別不一樣,

array

屬於int*

型別因為它是陣列首元素位址,

&array

屬於int (*)[5]

,因為它指向陣列,而陣列的型別為

int[5]

例如編譯如下的**,會得到注釋中的警告資訊

#include int main()

1.4中簡單介紹了陣列型別,這個型別寫起來還是有點彆扭,通常用

typedef

為其重新命名:

typedef  arraytype(newname)[size];

如:typedef int(int5)[5];

然後就可以使用它定義陣列了:

int5 a;

陣列指標用於指向乙個陣列;

陣列名是陣列首元素位址,不是陣列的起始位址,雖然它們值相同!

通過將取位址符&

作用於陣列名可以得到陣列的起始位址;

可通過重新命名的陣列型別定義陣列指標:

typedef  int(int5)[5];

int5 array;

int5* pa=&array;

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

int array[5];

int (*pa)[5];

pa=&array;

指標陣列也算是乙個普通的陣列,只不過陣列中每個元素為乙個指標;

指標陣列的定義:

type * parray[n];

例如:int* p[5];//

陣列中將存放5個

int*

型的位址

#include #include #define dim(array)  (sizeof(array)/sizeof(*array))

int lookup_keyworld(const char* key, const char* table, const int arraysize)

{int ret = -1;

int i = 0;

for (i = 0; i

C語言 指標陣列和指標陣列

本質是陣列 只不過呢,它裡面存放的資料型別不是int,也不是char這類基本型別,而是乙個指標型別,說白了就是位址,所以叫指標陣列!記住 是存放指標的陣列!int p n 本質是指標 只不過是指向乙個陣列的指標,也稱之為 行指標 int p n p是乙個指標,指向乙個int型別的一位陣列,這個一位陣...

C語言複習 指標和陣列

include include 陣列是一塊連續的記憶體空間 陣列名 就是記憶體空間的首位址 陣列名 i 陣列名 i main printf a 0 d n arr 0 printf a 4 d n arr 4 邏輯上是錯誤的 陣列下標越界 printf a 5 d n arr 5 windows x...

c語言複習 指標和陣列

注 本文是對蘇小紅版c語言程式設計第11章的筆記 陣列名代表陣列元素的連續儲存空間的首位址,即指向陣列中的第乙個元素的指標常量。e.g.a a 0 a i a i 不能對陣列名執行增1或減1的操作 a是指標常量 p 1 和p 本質上是不同的操作 雖然二者都對指標變數p進行加1運算,但p 1不改變指標...