指標和陣列

2021-06-22 12:00:35 字數 1184 閱讀 8457

1.指標和陣列名佔據的記憶體空間大小不一樣,如下程式1:

char str[10];

char *pstr=str;

cout<<

cout《從這裡我們可以看出:陣列名對應著(而不是指向)一塊記憶體(陣列所佔的記憶體區域)或者說是指代陣列這種資料結構,其位址與容量在生命期內保持不變,只有陣列的內容可以改變。指標對應著乙個佔據4個位元組(win32)的記憶體區域,而指向這4個位元組所儲存的位址所對應的記憶體單元,它可以指向任意型別的記憶體塊。因此,sizeof(str)值為陣列佔據的記憶體空間大小即10個位元組,而sizeof(pstr)值為指標的值佔據的記憶體空間大小即4個位元組。

2.陣列名不是指標,但是在一定的情況下轉換為指代陣列的首位址的指標,而這個陣列名轉為的指標只能是指標常量。

在以下兩種情況下才能進行這種轉換:

a.在程式1第二行**中,將陣列名直接賦值給指標,此時陣列名轉換為指向陣列的首單元的常量指標。

b.直接將陣列名作為指標形參的時候,陣列名則轉換為指向陣列的首單元的常量指標進行傳遞,如下程式2:

void fun(char str)

void main()

注意:陣列名作為函式形參進行傳遞時,在子函式體內,它已經不再是乙個指標常量,而是變成乙個真正的指標,可以進行增減等操作,可以被修改。所以程式2中子程式第一條語句輸出的sizeof(str)的值為4.

既然陣列名可以被看作指標常量,而常量是不能修改的,那麼如下**是不允許的:

char str[10];

str++;

但如下**則合法的:

char str[10];

char *pstr=str;

pstr++;

3.使用指標訪問陣列和使用陣列名訪問陣列本質不同。

例如:char str[7]=」ksarea」;

char *pstr=str;

cout<<<

其中str[3]和pstr[3]返回的都是字元』r',但是編譯器產生的執行**卻不一樣。對於str[3],執行**是從str開始,向後移動兩個位元組,然後取出其中的字元;而對於pstr[3],執行**是從pstr中取出位址,然後在其上加3,然後取出對應記憶體中的字元。

當然,如果pstr是指向int型的指標,那麼pstr[3]的處理過程是從pstr中取出位址,然後在其上加上3*sizeof(int),最後取出對應記憶體中的字元,其他的資料型別一次類推。

指標陣列和陣列指標

有關陣列指標和指標陣列容易混淆,本文舉例說明兩者的區別,並加以分析。基本概念 指標 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本身...