1. 程式人生 > >C語言指標的學習要點

C語言指標的學習要點

  1. 指標的定義
    變數的指標,其含義是指該變數的地址

  2. 指標和指標變數
    指標是一個地址,指標變數是存放地址的變數

  3. 兩個運算子
    *是指標運算子,也叫"間接訪問"運算子,*p代表指標變數p指向的物件。

    &是取地址運算子,&a是變數a的地址。

  4. 例題:int *point,a=4; point=&a;
    下面均代表地址的一項是()
    A. point, *&a
    B. &*a,&a,*point
    C. *&point,&*point,&a
    D. &a,&*point,point
    首先

    我們可以判斷,point這個指標變數存放了a的地址,那麼 point 和 &a 就是代表地址
    其次,我們知道 * 是取指的符號,那麼意思就是 *point=a=4; 那麼我們就大致可以開始判斷。
    A選項 point 代表地址, *&a 的意思是 取a地址中的值 那麼A選項排除
    B選項 &*a 該表示式錯誤,原因是未定義指標變數a ,&a正確, *point=4錯誤
    C選項 *&point表示式錯誤,因為point就代表地址,加&錯誤;&a正確, *point=4錯誤
    D選項 需要講解的就是 &*point,首先要清楚 運算子優先順序,*是大於&的,所以先
    取值 就是取a的值,然後再取a的地址。所以 答案選 D

  5. 通過指標引用陣列
    注意引用陣列的時候 int *p,a[10]
    p=a和p=&a[0]等價
    意思就是陣列名不代表整個陣列,而是把首元素的地址賦給指標變數p

  6. 引用陣列元素時指標的運算,看 例題:

#include<stdio.h>
int main()
{
	int x[] = {10,20,30};
	int *px = x;
	printf("%d,",++*px);
	printf("%d,",*px);
	px=x;
	printf("%d,",(*px)++);
	printf("%d,",*px);
	px=x;
	printf("%d,",*px++);
	printf("%d,",*px);
	px=x;
	printf("%d,",*++px);
	printf("%d,",*px);
	return 0;
 } 

輸出結果:
執行結果

其中 *px++ 和 *++px都是陣列下標加1的意思
那麼 ++*px 和 (*px)++ 就是值的自增了。

這個帖子大多都是很基礎的東西,但是用起來的時候 總是需要基礎作為支撐。因此比較繁瑣,也希望自己能夠記得牢固,