指標是資料在記憶體所佔儲存空間的首位址。存放指標值的變數稱為指標變數,當指標變數的值為某變數的位址時,稱這個指標指向該變數。同其他型別的變數一樣,指標變數也必須在使用前加以定義。
指標變數的內容可以是0、null和乙個確定的記憶體位址。其中0和null等價,它們表示空指標。除0外,其他任何常量都不允許直接賦值給指標變數。
c語言中用位址運算子(&)來返回某變數的位址。位址運算子的運算元必須是乙個記憶體變數,不能把位址運算子用於普通常量、表示式或暫存器型別的變數。
c語言用指標運算子(*,也稱為間接引用運算子或復引用運算子)來間接引用指標變數所指向的資料。根據所指向的資料型別,間接引用時從指標變數儲存的位址開始開始引用不同長度的資料。
指標常用於動態記憶體分配與管理,為提高在不同環境的可移植性,c語言提供了乙個單目運算子sizeof來返回某些資料型別所占有的位元組數。
如果呼叫函式要求被呼叫函式修改某些資料的值,應該把這些資料的位址作為實參傳遞給被呼叫函式的相應行參,被呼叫函式中的行參用指標運算子*間接修改呼叫函式中的對應實參值。
陣列名作為行參時,編譯程式實際上使用指標變數對其進行處理。
使用指向函式的指標變數作為引數,可以在不改變呼叫函式的情況下根據需要呼叫不同的函式。
指標可以指向不同資料型別的資料,包括函式,甚至指標型別。
多個相同型別的指標也可以構成指標陣列。
定義含義
int i;
定義整型變數。
int *p;
定義p為指向整型資料的指標變數。
int a[n];
定義整型陣列a,它有n個元素。
int *p[n];
定義指標陣列p,它有n個指向整型資料的指標元素組成。
int (*p)[n];
定義p為指向含n個元素的一維陣列的指標變數。
int f();
定義f為返回整型數值的函式。
int *p();
定義p為返回指標值的函式,該指標指向整型資料。
int (*p)();
定義p為函式指向返回整型資料的函式的指標變數。
int **p;
定義二重指標變數p,它指向乙個指向整型資料的指標變數。
指標變數的加減運算。例如p++,p--,p+i,p-i,p+=i,p-=i。
指標變數的加減運算通常用於連續的儲存區域中指標向前或後移動指向的位置。
賦值語句
含義p=&a;
將變數a的位址賦給p。
p=array;
將陣列array的首位址賦給p。
p=&array[i];
將陣列array第i個元素的位址賦給p。
p=max;
將max函式的入口位址賦給p。
p1=p2;
p1和p2為同型別指標變數,將p2的值賦給p1。
如果兩個指標變數指向同乙個陣列的元素,則兩個指標變數值之差是兩個指標之間的元素個數。
如果兩個指標變數指向同乙個陣列的元素,則兩個指標變數可以進行比較,指標值小的元素在前。
指標之間也可以和null進行比較,可以判斷指標是否指向了記憶體中的某個位址。
第10章 指標 六 指標小結
要說指標到這裡,就可以結束了,但是,我所講到的內容其實就是 譚先生教材中 的第10章的前2節,很有意思的是,指標的概念就是這麼多,你應該感覺到了,幾乎是沒有難度的 那麼,指標的深奧之處,到底體現在 呢?指標的應用 1 用於實現函式引數的雙向傳輸 明修棧道,暗渡陳倉 2 用於實現陣列下標的高效運算。3...
收藏 C Tips 8 指標引數
收藏 c tips 8 指標引數 這一系列文章 c tips 是公司code committee專家會推薦工程師看的,感覺很好,拿出來與大家共同提高。並不是知道多少會使人與人產生差別,真正的差別在於你能做到多少。coofucoo 函式的傳值和傳指標 向函式傳引數時,一般而言,傳入非const的指標時...
C 筆記整理8 指標 (總複習)
到指標了呀,c語言的精華之所在。正確的使用指標,可以有效地表示複雜的資料結構 動態地分配記憶體 方便地使用字串 有效而方便地使用陣列及直接處理記憶體位址等。辨別乙個人是新手還是老手的第二步就是看他能否靈活地使用指標 指標 通過變數名a直接訪問變數名a內的資料。2,間接訪問 將變數a的位址存放在另乙個...