C語言 指標

2021-08-11 03:35:04 字數 1787 閱讀 2095

指標儲存的是變數的記憶體位址。

通過型別*進行宣告,比如

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...