C語言陣列與指標的關係(陣列與指標作為函式引數)

2021-10-07 08:41:54 字數 2906 閱讀 2574

1.指標作為函式引數,可以修改函式外的值,而一般變數不行

如下:

#include

#include

#include

using

namespace std;

int a;

voidf(

int*p)

intmain()

這個的執行結果是5,因為指標指向a的位址

2.交換

#include

#include

#include

using

namespace std;

int x,y;

void

swap

(int

*a,int

*b)int

main()

思考:為什麼下列交換方式是失敗的

如上圖紅筆所示,交換xy不過是交換了函式中形參變數的值,形參的值不會影響實參,這對於任何變數都是成立的,所以

不能試圖通過改變形參指標變數的值而使實參變數指標的值改變

函式引數表中的陣列即指標

先來看一段**

#include

#include

#include

using

namespace std;

voidf(

int b)

intmain()

;printf

("%p\n"

,&a[0]

);f(a)

;return0;

}

上面這段**是在f函式和主函式中分別輸出陣列a和b的首位址

執行結果

在這裡可以看到,陣列a和b的首位址是完全一樣的,這與我們一開始所認識的普通變數作為函式引數不同,這裡的a陣列和b陣列完全是同乙個陣列,換句話說,b就是指向a陣列的乙個指標,函式中的int b=int *b

在c/c++中,當陣列作為函式的引數進行傳遞時,陣列就自動退化為同型別的指標

說了這麼多,指標作為函式引數有什麼用呢?

直接上**

#include

#include

#include

using

namespace std;

voidf(

int b)

intmain()

;printf

("%p\n"

,&a[0]

);f(a)

;for

(int i=

0;i<

10;i++

)printf

("%d "

,a[i]);

return0;

}

我們在f內部改掉了陣列b內的值,上文中提到過,b就是指向a陣列的乙個指標,指標變數相對於c++內其他變數最大的乙個優勢就是可以在函式裡修改函式外的值

執行結果

可以看到a陣列內的值已經被改掉了

當然這段**也可以這麼寫

voidf(

int*b)

執行結果和上述用陣列作為函式變數完全一樣(尤其注意,由於傳入的陣列實際上是指標,b中不用寫入數字)

陣列變數是特殊的指標

陣列本身表達位址,所以

1.int a[10]; int *p=a;//無需&取位址

2.陣列的單元表達的是變數,要用&取位址

3.a==&a[0];

運算子可以對陣列做,也可以對指標做

*運算子可以對指標做,也可以對陣列做

特別注意:陣列變數不能被賦值(陣列變數屬於常量指標)

#include

#include

#include

using

namespace std;

voidf(

int*b)

intmain()

;//printf("%p\n",&a[0]);

f(a);*

(a+1)=

10;//以指標的方式寫的**也可以修改陣列內的值

for(

int i=

0;i<

10;i++

)printf

("%d "

,a[i]);

return0;

}

執行結果

附三道雲班課例題

這裡的*p=a相當於p=a[0],p指向了a的第一行的第一列位址

*a 是列指標,*p也是列指標,p[1]相當於列往後移動一格

解析:定義了乙個行指標,指向了a,指向了第0行的位址,p[1]是列指標,指向第2行第0列的位址,取 " * "變成了值

C語言指標陣列與陣列指標

初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...

指標與陣列的關係

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

指標與陣列的關係

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