指標陣列和陣列指標分析

2021-06-16 18:53:25 字數 2141 閱讀 6114

int指的是陣列元素的型別,而不是陣列的型別

定義陣列型別

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

typedef  type(name)[size];

陣列型別:

typedef int(aint5)[5];

typedef float(afloat10)[10];

陣列定義:

aint5  iarray;            //aint5

代表乙個陣列型別,這個陣列有5個元素,每個元素型別是int型

afloat10  farray;   //afloat10

代表乙個陣列型別,這個陣列有10個元素,每個元素型別是float型

陣列指標

首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是「指向陣列的指標」的簡稱。

陣列名是陣列手元素的起始位址,但並不是陣列的起始位址

通過將取位址符&作用域陣列名可以得到陣列的起始位址

可通過陣列型別定義陣列指標:arraytype* pointer

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

.pointer為陣列指標變數名

.type為指向的陣列的型別

.n為指向的數字的大小

int (*p2)[10];

()的優先順序比高,*號和p2 構成乙個指標的定義,指標變數名為p2 ,int 修飾的是陣列的內容,即陣列的每個元素。陣列在這裡並沒有名字,是個匿名陣列。那現在我們清楚p2 是乙個指標,它指向乙個包含10 個int 型別資料的陣列,即陣列指標,如下圖

例1:typedef int(aint5)[5];

typedef float(afloat10)[10];

typedef char(achar9)[9];

int main()

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

printf("%0x, %0x, %0x\n", &carray, pc+1, pcw+1);  

// pc+1 <=> (unsigned int)pc + 1*sizeof(*pc),指向這個陣列9個元素後面

// pcw+1 <=> (unsigned int)pcw + 1*sizeof(*pcw),雖然賦值是個char*,但指向這個陣列4個元素後面

}指標陣列

首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是「儲存指標的陣列」的簡稱

指標陣列是乙個普通的陣列

指標陣列中每個元素為乙個指標

陣列指標的定義:type*  aarray[n];

type* 為陣列中每個元素的型別

parray為陣列名

n為陣列大小

的優先順序比*要高。p1 先與結合,構成乙個陣列的定義,陣列名為p1 ,int *修飾的是陣列的內容,即陣列的每個元素。那現在我們清楚,這是乙個陣列,其包含10 個指向int 型別資料的指標,即指標陣列,如下圖

例2:const char* keyword = ;                     //keyword陣列中每個元素都是char*型別的字元指標

main函式的引數

main函式可以理解為作業系統呼叫的函式

在執行程式的時候可以想main函式傳遞引數

例3:#include

int main(int argc, char* argv)

printf("**********==== end env **********====\n");

} cmd下執行得:

指標陣列和陣列指標

有關陣列指標和指標陣列容易混淆,本文舉例說明兩者的區別,並加以分析。基本概念 指標 inta 1 int p a 指標的指標 int p2p p 簡單陣列 intb 20 指標陣列 int p 10 指標陣列,含有10個指標元素,即每乙個元素都是乙個指標 陣列指標 int p 10 這個指標用來指向...

指標陣列和陣列指標

理解這兩個概念,當從語言學的語法角度開始,定語 名詞,即 的 語句。指標陣列 指標的陣列 陣列指標 陣列的指標。一 指標陣列 元素為指標的陣列 顧名思義,就是說的首先是乙個陣列吧,然後陣列的元素是指標而已。說明形式為 type pointer array constant1 constant2 co...

指標陣列和陣列指標

該文時自己對指標陣列用法的一點總結,還望高手指點不足原文如下 由於以前對指標陣列不太明白,所以自己寫了 乙個小的測試程式來驗證了自己的猜測,先總結如下 指標陣列,由名字就可以知道的該陣列中的成員都是為指標的。其定義的方法為 char p 5 該初定義乙個包含5個char 型別的陣列的指標,由於p本身...