直接引用:
char a;
a = 10;
我們通過變數名來直接引用變數,然後進行賦值.
看似簡單,但是系統會自動將變數名a轉換為變數的儲存位址,根據位址找到變數a的儲存空間,然後再將資料 10 以二進位制的形式放入變數a的儲存空間中。
通過變數名引用變數,由系統自動完成變數名和儲存位址之間的轉換,稱為變數的「直接引用".
存放變數位址的變數,我們稱之為"指標變數", 變數p中儲存的是變數a的位址,那麼p就可以稱為是指標變數,或者說p指向a。
根據"直接引用"的理解,當我們通過p取得a的時候首先把p轉換成p對應的儲存位址,再根據這個位址找到對應的儲存空間中拿到儲存內容,p儲存的內容就是a的位址,然後根據這個位址到對應的儲存空間中取得對應的資料,這個資料就是a的值.
這種通過p找到a對應位址再取值的方式稱為「間接引用」.
2.1 類名識別符號 *指標變數名
int *p;
double *q;
1."*"是乙個說明符,用來說明這個變數是個指標變數,是不能省略的,但
它不屬於變數名的一部分
2.前面的型別識別符號表示指標變數所指向的變數的型別,而且只能指向這種型別的變數
2.2指標的初始化
// 定義int型別的變數a
int a = 10;
// 定義乙個指標變數p
int *p;
// 將變數a的位址賦值給指標變數p,所以指標變數p指向變數a
p = &a;
&取位址符號
//也可以這樣
int *p = &a;
注意:不能給指標變數賦值常數
int *p; //錯誤 p = 200;
2.3.給指標指向的變數賦值(修改)
int a = 10;
printf("修改前,a的值:%d\n",a); //10
int *p =&a;
//通過指標變數的p間接修改變數a的值
*p = 9;
printf("修改後的,a的值:%d",a); // 9
可以發現,我們通過變數p間接修改了變數a的值
注意:在指標變數沒有指向確定位址之前,不要對它所指的內容賦值。
int *p;
//錯誤,沒有指向確定的位址
*p = 10;
正確的寫法:
int a = 7,b;
int *p = &b;
*p = a;
1.乙個指標變數占用多少個位元組的記憶體空間?占用的空間是否會跟隨所指向變數的型別而改變?
在同一種的編譯器環境下,乙個指標變數所占用的記憶體空間是固定的.
2.既然每個指標變數所占用的記憶體空間是一樣的,而且儲存的都是位址,為何指標變數還要分型別?而且只能指向一種型別的變數?比如指向int型別的指標、指向char型別的指標。
例子:
int i =2;
char c = 1;
//定義乙個指向char型別的指標
char *p = &c;
//取出
printf("%d",*p); //列印1
如果改了 char *p = &c 為 int *p = &c;
輸出的值為:513;
wtf什麼回事?
假設在16位編譯器下,指標位元組為2
由於區域性變數的是儲存在棧裡面,先儲存 i 再儲存 c 、p.
其中,指標變數p和int型別變數i各佔2個位元組,char型別的c佔乙個位元組,p指向c,因此p值就是c的位址.
1.最初的時候,我們用char *p指向變數c。當利用*p來獲取變數c的值時,由於指標p知道變數c是char型別的,所以會從ffc3這個位址開始讀取1個位元組的資料:0000 0001,轉為10進製就是1
2. 後來,我們用int *p指向變數c。當利用*p獲取變數c的值時,由於指標p認為變數c是int型別的,所以會從ffc3這個位址開始讀取2個位元組的資料:0000 0010 0000 0001,轉為10進製就是513
可見,給指標分類是多麼重要的一件事,而且一種指標最好只指向一種型別的變數,那是最安全的。
C語言總結4 指標上
指標的定義 type 資料型別 不知道指標指向 時可以置為null,沒有指向固定位置的指標為野指標 指標的大小在32位平台下是4位元組,在64位平台下是8位元組 includeint main 對指標加減1是加減上其所指向型別的大小 指標指向的都是首位址,所以加減一是加減型別所佔位元組數 指標的型別...
C語言指標總結
2012 03 07 07 22 標籤 c語言 分類 pointer c語言中的精華是指標,這也是c語言中唯一的難點。c是對底層操作非常方便的語言,而底層操作中用到最多的就是指標,以後從事嵌入式開發的朋友們,指標將陪伴我們終身。1.指標型別分析 分析指標,可以從變數名處起,根據運算子優先順序結合,一...
C語言指標總結
c語言中的精華是指標,這也是c語言中唯一的難點。c是對底層操作非常方便的語言,而底層操作中用到最多的就是指標,以後從事嵌入式開發的朋友們,指標將陪伴我們終身。1.指標型別分析 分析指標,可以從變數名處起,根據運算子優先順序結合,一步一步分析.int p 這是乙個普通的整型變數 int p 首先從 p...