陣列指標與指標陣列

2021-07-15 09:34:15 字數 2445 閱讀 9686

空間分配:

陣列:是一種靜態分配(靜態儲存區或棧空間) 

指標:是一種動態分配(堆空間) 

訪問效率

陣列:直接訪問值(更高) 

指標:間接訪問值 

安全性陣列:可能會出現陣列越界(更高) 

指標:可能會造成記憶體洩漏 

函式形參

陣列:一維陣列用指標存放,二維陣列用一維指標存放 

處理物件

陣列:偏向於對值的處理 

指標:偏向於對機器數的處理 

空間連續性

陣列:一定是連續的空間 

指標:不一定是連續的空間

#include 

using

namespace

std;  

intmain ( )  

;  char

* * p=str+1;     

//p指向 "to"字串位址

str[0]=(*p++) +2;          //str[0]指向'\0';           然後p後移 p=str[2]

str[1]=*(p+1);            //p+1後 p+1 = str[3];   然後 str[1] = str[3]         

str[2]=p[1]+3;             //str[2]指向str[3]的從0開始數的第三個 str[2]指向"jing"位址

str[3]=p[0]+(str[2]-str[1]);  //str[3]指向從p[0]開始(也就是*p,也就是str[2])的 偏移量為(str[2]-str[1])的位址~ str[2]指向"jing",str[1]指向str[3],也就是"namjing",所以str[3]指向"jing"的"g"位址

printf("%s\n"

,str[0]);  

printf("%s\n"

,str[1]);  

printf("%s\n"

,str[2]);  

printf("%s\n"

,str[3]);  

return

0;  

}  

[cpp]view plain

copy

intmain()  

;   

char

**p = str + 1;   

str[0] = *p++;   

//;str[1] = *(p+1);   

//;str[2] = p[1] + 3;   

//;str[3] = p[0] + (str[2] - str[1]);   

//str[2]-str[1]是原來的指向nanjing中的j的指標減去nanjing中的n的指標,當然是3了

//p[0] 是指向"jing"中的j的,再加3就是g了

printf("%s\n"

,str[0]);   

printf("%s\n"

,str[1]);   

printf("%s\n"

,str[2]);   

printf("%s\n"

,str[3]);   

陣列指標(也稱行指標)

定義 int (*p)[n];

()優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p+1時,p要跨過n個整型資料的長度。

如要將二維陣列賦給一指標,應這樣賦值:

int a[3][4];

int (*p)[4]; //該語句是定義乙個陣列指標,指向含4個元素的一維陣列。

p=a;        //將該二維陣列的首位址賦給p,也就是a[0]或&a[0][0]

p++;       //該語句執行過後,也就是p=p+1;p跨過行a[0]指向了行a[1]

所以陣列指標也稱指向一維陣列的指標,亦稱行指標。

指標陣列

定義 int *p[n];

優先順序高,先與p結合成為乙個陣列,再由int*說明這是乙個整型指標陣列,它有n個指標型別的陣列元素。這裡執行p+1時,則p指向下乙個陣列元素,這樣賦值是錯誤的:p=a;因為p是個不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它們分別是指標變數可以用來存放變數位址。但可以這樣 *p=a; 這裡*p表示指標陣列第乙個元素的值,a的首位址的值。

如要將二維陣列賦給一指標陣列:

int *p[3];

int a[3][4];

p++; //該語句表示p陣列指向下乙個陣列元素。注:此陣列每乙個元素都是乙個指標

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

p[i]=a[i]

這裡int *p[3] 表示乙個一維陣列內存放著三個指標變數,分別是p[0]、p[1]、p[2]

所以要分別賦值。

指標與陣列,指標陣列 陣列指標

int a 10 print n a p,a p a,a print n a 1 p,a 1 p a 1,a 1 a做乙個指標,步長為4,指向乙個元素,a做乙個指標,步長為40,指向乙個維陣列 int b 3 4 print n b p,b p,b p b,b,b print n b 1 p,b 1...

陣列 指標陣列與陣列指標

一 陣列型別 int a 10 printf a d,a 1 d n a,a 1 printf a d,a 1 d n a,a 1 輸出結果 2 陣列元素的首位址是常量,不能修改,這是為了釋放記憶體空間所必需的,否則找不到釋放記憶體空間的首位址了 3 定義乙個陣列型別 定義陣列型別的格式如下 typ...

指標陣列與陣列指標

1.指標陣列 指標陣列中每乙個元素都是乙個指標,也既是存放字串的首位址。所以指標陣列適合處理若干個長度不等的字串。定義的一般形式為 型別說明符 指標陣列名 陣列長度 例如 int p 3 宣告乙個陣列,指標陣列p,由3個int型別指標變數元素組成 從運算子的優先順序分析,由於 的優先順序大於 所以p...