天天看點

01深入了解C指針之---指針含義符号

深入了解C指針之---指針含義符号

該系列文章源于《深入了解C指針》的閱讀與了解,由于本人的見識和知識的欠缺可能有誤,還望大家批評指教。

1、指針的含義:

指針本身也是變量,與其他一般變量不同的是:指針變量中沒有存儲具體類型的資料,而是存儲這一串16進制的值。這串值,就是記憶體的位址。計算機的OS運作時,管理記憶體過程中,為了高效管理記憶體,為記憶體進行編号,以位元組為機關編号。而記憶體的位址存放到變量中。這樣看來,指針的位址也是位址,指針變量中的值也是位址。

2、*符号的作用

(1)聲明指針變量使用

(2)解指針變量,取出指針值中對應位址的值

3、&符号的作用

取變量的位址

請看例子,非常簡單,但是說明的問題還是很多:

 1 #include <stdio.h>

 2 

 3 int main(int argc, char *argv)

 4 {

 5     int num = 10;

 6     int *numptr;

 7     numptr = &num;

 8     printf("Address num: %p, value num: %d\n", &num, num);

 9     printf("Address numptr: %p, value numptr: %p, value *numptr: %d\n", &numptr, numptr, *numptr);

10 

11     return 0;

12 }

第一次運作結果:

Address num: 0x7fffbfa6236c, value num: 10

Address numptr: 0x7fffbfa62360, value numptr: 0x7fffbfa6236c, value *numptr: 10

第二次運作結果:

Address num: 0x7ffdbff4ff0c, value num: 10

Address numptr: 0x7ffdbff4ff00, value numptr: 0x7ffdbff4ff0c, value *numptr: 10

(1)聲明一個變量num,實際在計算機中num是代表位址,而位址就更加具體了,變量名隻是讓人看起來更加習慣,在計算中是不存在這個num變量的,很明顯可以看出兩次運作的結果中同樣的num,位址是不一樣的,但是這不會影響這個變量名為num,就向人的名字一樣,取名字時都是可以随便取的一樣。

(2)雖然兩次的位址不一樣,但是由于使用了相同的變量名num,是以使用變量通路是得到的就是同樣的值為10

(3)例中我門使用了&取位址符号,順利得到了num的位址,兩次都不一樣

人就像是被蒙着眼推磨的驢子,生活就像一條鞭子;當鞭子抽到你背上時,你就隻能一直往前走,雖然連你也不知道要走到什麼時候為止,便一直這麼堅持着。