C語言總結之指標 上

2021-08-20 00:19:30 字數 2419 閱讀 1930

直接引用:

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