指標與陣列
指標變數定義的一般形式:
型別 *指標變數名
符號*在變數宣告語句中是指標型別說明符,前面的型別用於宣告指標可以指向哪種型別的變數,稱為指標的基型別。
例如:
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這個值究竟存在 如果變數是靜態的...