C 陣列與指標的關係詳解

2021-07-26 16:35:50 字數 1727 閱讀 4604

指標和陣列的關係

陣列名被看作該陣列的第乙個元素在記憶體中的首位址(僅在sizeof操作中例外,該操作給出陣列所佔記憶體大小)。陣列在記憶體的首位址,邏輯上可看作是存放在該陣列的陣列名中的。

陣列名在表示式中被自動轉換為乙個指向陣列第乙個元素的指標常量。陣列名中所放的位址是不可改變的,所以稱指標常量(即隱含說明「元素型別* const陣列名」)。

陣列名指向的目標是陣列元素,而不是陣列整體。

fibon<–>&fibon[0]

fibon<–>&fibon[0]

(陣列的第乙個元素的位址)

*fibon<–>fibon[0]

(陣列的第乙個元素)

fibon+1<–>&fibon[1]

*(fibon+1)<–>fibon[1]

c++語言的下標運算子[ ]是以指標作為運算元的,fibon[i]被編譯系統解釋為*(fibon+i),即表示為fibon所指(固定不可變)元素向後第i個元素。無論我們是以下標方式或指標方式訪問陣列元素,系統都轉換為指標方法實現。這樣做對多維陣列尤其方便。邏輯上有兩種方式,物理上只有一種方式。

指標的算術運算和關係運算

指標變數與整型量的加減表示移動指標,以指向當前目標前面或後面的若干個位置的目標。指標與整型量i的加減等於指標值(位址)與i*sizeof(目標型別)積的加減,得出新的位址。(檢視動畫演示)

只有當兩個同型別的指標變數指向同乙個陣列時才可以進行減法運算,結果表示由第乙個指標所指元素到第二個指標所指元素之間的元素數量。這裡數量算頭不算尾。

當且僅當兩個同型別指標變數指向同一陣列中的元素時,可以用關係運算子》,==,!=等進行比較,比較規則是指向後面元素的指標大,指向同一元素的相等。

指標同樣可以進行」++」,」–「運算,運算結果也是指向後乙個或前乙個陣列元素。

【例5.8】指標與陣列相關的運算。

#include

using namespace std;

int main(),*pfib1,*pfib2;

pfib1=pfib2=fibon;                         //也可以用pfib1=pfib2=&fibon[0]

cout<<"使用陣列顯示斐波那契數列"<◆引用呼叫與指標傳值呼叫

c++中函式的引數的基本使用方法是傳值。為了彌補單純傳值的不足,以引用作為函式的引數,從邏輯上講引用是別名,在函式中對引數的操作,就是對實參的操作,而在物理上是傳實參的位址。

將指標用作函式的引數時,傳的仍然是值,指標的值,這個值就是指標所指向的變數或物件的記憶體首位址,在物理上傳的是指標的值,在邏輯上講是把另乙個變數的位址傳過去了,可以看作傳位址。

建議在函式引數傳遞中,能用「引用」時絕不用「指標」。

【例5.9】用指標代替引用實現兩資料的交換。

#include

using namespace std;

void swap(double *d1,double *d2)

int main(void){

double x,y;

cout<<"請輸入x和y的值"<<'/n';

cin>>x>>y;

cout<<"x="<◆指標作為返回值

函式的返回值也可以是指標。如希望返回多個值,可以用引用引數或指標引數來等效實現,如果我們希望返回乙個陣列,並且這個陣列生命期不在該函式中消亡,我們可以返回乙個指向該陣列的指標。

C 陣列指標與指標陣列的詳解

在 c c 中,陣列與指標是既相互關聯又有區別的兩個概念。當我們宣告乙個陣列時,其陣列的名字也是乙個指標,該指標指向陣列的第乙個元素。陣列名的意義 sizeof 陣列名 這裡的陣列名表示整個陣列,計算的是整個陣列的大小。陣列名,這裡的陣列名表示整個陣列,取出的是整個陣列的位址。除此之外所有的陣列名都...

C 指標陣列與陣列指標詳解

首先先定義乙個指標陣列,既然是陣列,名字就叫arr char arr 4 arr就是我定義的乙個指標陣列,它有四個元素,每個元素是乙個char 型別的指標,這些指標存放著其對應字串的首位址。即 char arr 4 當乙個變數出現左右都出現乙個運算子時,沒有記住運算子優先順序的人就會糾結arr變數到...

指標與陣列的關係

指標與陣列的關係 指標與陣列是c語言中很重要的兩個概念,它們之間有著密切的關係,利用這種關係,可以增強處理陣列的靈活性,加快執行速度,本文著重討論指標與陣列之間的聯絡及在程式設計中的應用。1 指標與陣列的關係 當乙個指標變數被初始化成陣列名時,就說該指標變數指向了陣列。如 char str 20 p...