指標儲存的是變數的記憶體位址。
通過型別*
進行宣告,比如
int *ip; /* 乙個整型的指標 */
double *dp; /* 乙個 double 型的指標 */
float *fp; /* 乙個浮點型的指標 */
char *ch; /* 乙個字元型的指標 */
無論哪種型別指標的實際資料,都是乙個代表記憶體位址長的十六進製制數。不同資料型別的指標之間唯一的不同是: 指標所指向的變數或常量的資料型別不同。
int i = 90;
//指標變數,建立乙個int型別的指標
int* p = &i;
//間接賦值,在指標變數中儲存 i 的位址
*p = 200;
printf("i的值為:%d\n", i);
printf("p的值為:%#x\n", p);
printf("p指向的值為:%#x\n",*p);
printf("i的位址為:%#x\n", &i);
printf("p的位址為:%#x\n", &p);
列印結果顯示
i的值為:200
p的值為:0xbbfce8
p指向的值為:200
i的位址為:0xbbfce8
p的位址為:0xbbfcdc
指標是有型別的,而位址沒有型別。
位址只是記錄開始的位置,型別告訴讀取到什麼位置結果。
int* 讀取4位元組,double* 讀取8位元組空指標記憶體位址為0,記憶體位址為0x000000。
在變數宣告的時候,如果沒有確切的位址可以賦值,為指標變數賦值乙個null值是乙個良好的程式設計習慣。
int *p = null; //空指標
列印結果為
0
大多數情況下,程式不允許訪問位址為0的記憶體,因為該記憶體是作業系統保留的。(其他100、1000大多也不能訪問)按照慣例,如果指標是空值,則假定它不指向任何東西。但是記憶體位址0有特別重要的意義,標明該指標不指向乙個可訪問的記憶體位置。
如何檢查空指標
if(p) /* 如果 p 非空*/
if(!p) /* 如果 p 為空*/
指標的加減法,就是指標向前/向後移動sizeof(資料型別)個位元組。
int ids = ;
//ids和&ids[0]輸出的位址相同,ids就是資料的首位址
printf("%#x\n", ids);
printf("%#x\n", &ids);
printf("%#x\n", &ids[0]);
int *p = ids;
printf("改變前p的值:%#x\n", p);
p++;
printf("改變後p的值:%#x\n", p);
列印結果
0x8ff9c8
0x8ff9c8
0x8ff9c8
改變前p的值:78
改變後p的值:90
參考文件
C語言指標
指標變數是包含記憶體位址的變數,它指向記憶體中的一塊區域,通過指標的值,可以間接訪問到相應的記憶體單元的資料,並做相應的修改。1 指標的定義和簡單使用 定義乙個指標變數和定義一般的變數類似,只需在變數名前面加乙個 對乙個指標變數賦值可以用取位址符 來獲取到乙個變數的位址,如果要獲得指標指向的記憶體區...
C語言指標
1 定義指標變數void change int n 格式 變數型別 變數名 定義了乙個指標變數p 指標變數只能儲存位址 指標變數p前面的int 指標變數p只能指向int型別的資料 int main void change int n 2 指標與陣列 陣列名其實質是乙個指標,但是它和普通的指標變數還是...
c語言指標
編寫程式,在主函式裡用指標陣列輸入六個字串,再用另乙個函式對這六個字串排序,並在主函式中輸出排好序的字串。include void sort char s,int n char temp for int i 0 ifor int j 0 jif strcmp s j s j 1 0 temp s j...