每乙個變數都有記憶體位置,每乙個記憶體位置都定義了可以用運算子&來訪問變數的位址。
//列印變數n的位址
#include int main()
//輸出結果
n變數的位址0x7ffeefbff728
program ended with exit code: 0
指標是位址,變數的位址,指標變數是存位址的變數,其值為記憶體位置的直接位址。就像其他變數或常量一樣,和其他變數一樣,在使用指標之前,對其進行宣告。指標變數宣告的一般形式,為
type *var-name;
type 是指標的基型別,必須是乙個有效的c的資料型別,var-name是指標變數的名稱。用來宣告指標變數的*與乘法中的星號是相同的,在這個語句中,星號是來說明這個變數是指標,以下是有效的指標型別。
int *p;//乙個整型指標
double *dp;//乙個double型指標
float *fp;//乙個浮點型指標
char *ch;//乙個字元型的指標
指標的大小與型別 無關。 只與當前使用的平台架構有關。 32位:4位元組。 64位: 8位元組。
int a = 10;
int *p = &a; int* p;--- windows; int *p ---linux int * p ;(習慣不同 自己選擇)
int a, *p, *q, b;
*p = 250; 指標的 解引用。 間接引用。
如果做左值: 存資料到空間中。
如果做右值: 取出空間中的內容。
//修改解引用(間接引用),用變數的方法去讀
int main()
//修改變數,用解引用的方法去讀
int main()
int *p;
*p = 1000;
2)p變數有乙個值,但該值不是可訪問的記憶體區域。
int *p = 10;//0-255這一部分的記憶體是要確定留給作業系統使用的,但是1000的也不行,武斷的給乙個數值是不行的
*p = 2000;
【杜絕野指標】
//初始化指標
int m;
int *p;
p = &m;
int *p = null; #define null ((void *)0)//巨集 0的指標型別,null就是個0,0號位址也不能用
*p 時 p所對應的儲存空間一定是乙個 無效的訪問區域。不會出現投機的寫對了乙個位址的現象。
經過一系列**後,可能會變成有效的,在使用這個指標之前,可以先判斷一下這個指標是不是還是空,
#include int main()
return 0;
}
可以接收任意一種變數位址。但是,在使用【必須】借助「強轉」具體化資料型別。強制轉換資料型別不會發生資料丟失,因為指標的大小都是一樣的。
char ch = 'r';
void *p; // 萬能指標、泛型指標
p = &ch;
printf("%c\n", *(char *)p);
//如果不強制轉換會報錯
//更改後這樣就行了
int main()
,如下
C語言 指標1
指標恐怕是c語言中最不容易掌握的乙個概念了,但指標又是如此的重要,可以說不會指標,c語言就等於沒學。指標到底是乙個什麼東西呢?include int main char pch null char pstr hello pointer short pshort null int pint null ...
C語言指標1
陣列與指標 陣列的名字是第一元素的位址。include int main printf str 0 的位址是 p n str 0 輸出 str 0 的位址是 000000000062fdc0陣列相鄰每一元素之間相差值 資料型別的寬度 include int main float b 3 double...
C語言指標1
1 取位址符 2 雙目運算子 例如a b 按位於 指標 位址 int p 定義整型指標變數 double p1 定義浮點型指標變數 int a 10 整型變數存放整型值 double b 23.3 浮點型變數存放浮點數 int p a 整型指標變數存放整型位址 指標 p 為間接訪問符,也稱為解引用 ...