C語言基礎(9) 指標

2021-10-06 08:00:38 字數 2348 閱讀 5896

指標與陣列

指標變數定義的一般形式:

型別  *指標變數名
符號*在變數宣告語句中是指標型別說明符,前面的型別用於宣告指標可以指向哪種型別的變數,稱為指標的基型別。

例如:

int *pt1;

int *pt2;

int a=520;

int *pt=&a;

用*運算子可以獲取指標變數所指向變數的內容,該運算子被稱為指標變數間接運算子。

例如:

int a=520;

int *pt=&a;

*pt=100; /*對pt所指向的變數a賦值為100*/

【例1】

下面的**段是否有問題?

int *a;

*a=12;

上述的**段是有個錯誤的。我們宣告建立了乙個名叫a的指標變數,後面那條賦值語句把12儲存在a所指向的記憶體位置。那麼這個a到底是指向**的呢,我們宣告了這個變數,卻從未對它進行初始化,所以沒辦法**12這個值到底儲存在什麼地方。

指標變數可以指向陣列中的某一元素。例如:

int a[5];

int *p; //定義乙個指向整型變數的指標變數p

p=&a[0]; //把a[0]元素的位址賦值給指標變數p

在c語言中,陣列名代表陣列中首位址(即序號為0的元素)的位址,所「p=a;」等價於「p=&a[0];」

【例2】以下程式的執行結果是( )。

#includeint main()

,y=1,x,*p;

p=&a[1];

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

y+=*(p+x);

printf("%d\n",y);

return 0;

}

a、 17

b、 18

c、 19

d、 20

y=1+*(p+0)+*(p+1)+*(p+2)=1+4+6+8=19
可能會有人誤選為b,題目已經把指標變數p指向陣列元素a[1]的位址,並不是陣列首元素的位址。

指向二維陣列的行指標

【例3】

【填空題】

以下程式通過指向陣列a[3][4]的指標將其內容按3行4列的格式輸出,請給printf輸入語句填入適當的引數,使之通過指標p將陣列元素按要求輸出。

#includeint main()

,,},(*p)[4]=a;

int i,j;

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

return 0;

}

正確答案:

p[i][j] 或 * (*(p+i)+j) 或  ( * (p+i) )[j] 或 *(p[i]+j)(任選乙個即對)
題目分析:題目給出int (*p)[4];

由於定義乙個行指標的一般格式為 :

型別 (*行指標名)【常量m】

所以題目定義的是乙個行指標,通過行指標p訪問二維陣列a的元素a[i][j]的方法有四種形式

p[i][j] 、 * ( * (p+i)+j) 、( * (p+i))[j] 、*(p[i]+j)。

指向二維陣列的列指標

【例4】

【填空題】

以下程式通過指向陣列a[3][4]元素的指標將其內容按3行4列的格式輸出,請給printf輸入語句填入適當的引數,使之通過指標p將陣列元素按要求輸出。

#includeint main()

,,},*p=&a[0][0];

int i,j;

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

return 0;

}

正確答案:

*(p+4*i+j)
題目分析:

寫這道題目時,我們先思考一下;如題**所示:

如果我們想通過列指標p訪問二維陣列a的元素a[i][j],可以將二維陣列a看成乙個由3*4=12個元素組成的一維陣列。

p被賦值為a[0],即二維陣列a第0行第0列元素a[0][0]的位址(即a[0],或a[0][0]),從二維陣列的第0行第0列的元素a[0][0]到第i行第j列元素a[i][j]之間共有i*4+j個元素(4表示二維陣列的列數)。

a[0]+i*4+j,即p+i*4+j,

因此,通過列指標p訪問二維陣列a的第i行第j列元素a[i][j]的形式為:

*(p+i*4+j)。

C語言基礎學習 9 指標

指標全稱是指標變數,其實質是c語言的一種變數。這種變數比較特殊,通常它的值會被 賦值為某個變數的位址值 p a 然後我們可以使用 p這樣的方式去間接訪問p所 指向的那個變數。指標存在的目的就是間接訪問。有了指標之後,我們訪問變數a不必只通過a這個變數名來 訪問。而可以通過p a p 這樣的方式來間接...

C語言基礎四 指標

指標表示乙個位址,什麼型別的指標就應該指向什麼型別的記憶體空間,例如int 型別的指標就應該指向乙個int型別的空間。int a 7 int p null 指標的定義 p a 指標的繫結 p 5 指標的解引用對於同型別指標p1,p2,一般有這幾種運算 p1 3,p1 3,p2 p1 int a 5 ...

c語言基礎2指標

指標的詳解 指標的定是 int a b 1 a b 可以看出來,a這個指標變數存的是b的位址。可以變形為int a b d 表示訪問位置100,並取得裡面的值。乙個常見的錯誤,int a a 12 但是a究竟指向 呢,由於我們沒有對a進行初始化,所以我們沒有辦法 12這個值究竟存在 如果變數是靜態的...