指標和陣列

2021-06-30 16:30:24 字數 1253 閱讀 8027

指標變數既然可以指向變數,當然也可以指向陣列元素(把某一元素的位址放到乙個指標變數中),所謂陣列元素的指標就是陣列元素的位址。

int a[10];

int *p;

p=&a[0];    //把a[0]元素的位址賦給指標變數p,也就是使p指向陣列a的第0個元素。

注意:(1)p+i和a+i就是a[i]的位址,  即實際位址的計算方法為a+i*d,因為為int型,所以d=2.

(2)*(p+i)或*(a+i)是p+i或a+i所指向的元素,即a[i]

(3)指向陣列的指標變數也可以帶下標,如p[i]與*(p+i)等價

所以,引用乙個元素,可以用

1、下標法,如a[i]

2、指標法,如*(a+i)或*(p+i)

在使用指標變數指向陣列元素時,需要注意以下幾個問題:

(1)可以通過改變指標變數的值指向不同的元素,eg:p++,這是可以的

(2)要注意指標變數的當前值

(3)上面的例子中陣列的大小為10,但是實際上指標變數p可以指向陣列以後的記憶體單元。

(4)注意指標變數的運算(p=a)

i、p++,使p指向下乙個元素,即a[1],若再執行*p,則得到a[1]的值

ii、*p++,由於*和++同乙個優先順序,結合方向為自右向左,因此等價於*(p++),作用是先得到*p,再使p+1

用陣列名做函式引數

void main(){

void f(int arr,int n);

int array[10];

f(array,10);   //實參

void f(int arr,int n)    //形參

實參陣列名代表的是該陣列首元素的位址,而形參是用來接收從實參傳遞過來的陣列首元素的位址,因此,形參應該是乙個指標變數。

因為只有指標變數才能存放位址。實際上,c編譯都是將形參陣列名作為指標變數來理解的

所以 f(int arr,int n)和f(int *arr,int n)是等價的,在編譯時,將arr按指標變數處理。

sizeof(arr)=2,整型指標為2個位元組,是按指標變數進行處理的。

當arr接收了實參陣列的首元素位址後,arr就指向實參陣列的首元素。也就是array[0]

注意:當用變數名作為函式引數時傳遞的是變數的值,

當用陣列名作為函式引數時,由於陣列名代表的是陣列首元素的位址,所以傳遞的是位址。

因此形引數組和實參陣列共占同一段記憶體,在呼叫函式期間,如果改變了形引數組的值,也就是改變了實參陣列的值。

指標陣列和陣列指標

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