C語言--解引用


在《C和指針》上面看到“解引用”這個名詞,就好奇的去查了查。

例:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int main(void)
 5 {
 6     int a=10;
 7     int *p=&a;
 8     *p=5;//這就是一個解引用
 9     system("PAUSE");
10     return 0;
11 }

 

在百度上面的解釋是:"'解引用',我倒覺得可以從另一個角度理解,"*"的作用是引用指針指向的變量值,引用其實就是引用該變量的地址,"解"就是把該地址對應的東西解開,解出來,就像打開一個包裹一樣,那就是該變量的值了,所以稱為"解引用"。也就是說,解引用是返回內存地址中保存的值。",個人理解就是將指針p中的地址給解析出來。

  看了之后還是迷糊迷糊的,於是上Google上查了“*”,維基上的解釋是:“The asterisk is used to deference or to declare a pointer variable.”,在*p=5這里當然是前者的deferece了,但取消引用,什么是取消引用,取消什么呢?自己還是沒有一個准確的概念,於是拿着這個問題請教了自己的師哥。花了近2個小時,終於明白了。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int main(void)
 5 {
 6     int a=10;
 7     int *p;
 8     p=&a;
 9     *p=5;
10     printf("%d\n",*p);
11     system("PAUSE");
12     return 0;
13 }

 

  解引用(看例題),相當於使指針p指向於a。我們可以先一步一步理解:

在內存中內存是一塊一塊的,這里的編號就是他們的地址。

int a=10;

先聲明一個變量a給他一個小盒子,然后把10裝進這個小盒子里面。

然后對指針p,先分配給他一個小盒子(指針也是變量)。

然后,

p=&a//往小盒子里面放a的地址

 接着

*p=5;//往小盒子里面放東西

最后

printf("%d\n",*p);//看小盒子里面有什么

最后兩行代碼:一個寫入數據,一個讀取數據。這個就是解引用;

 

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3

4 int main(void)
 5 {  6     int a=10;  7     int *p;  8     p=5;  9     system("PAUSE"); 10     return 0; 11 }//這個代碼不會炸(崩潰)

 

 1  #include <stdio.h>
 2  #include <stdlib.h>
 3  
 4   int main(void)
 5  {
 6      int a=10;
 7      int *p;
 8      p=5;
 9      *p=5;
10      system("PAUSE");
11      return 0;
12  }//這個代碼炸了

原因就是:p=5;表示將整型值5存儲到指針p中(在指針p中是作為地址存在哦)

     *p=5;表示將整型值5儲存到指針p小盒子里面的地址指向的那個小盒子里面。(地址5你知道有東西嗎!)

附加:變量一旦確定,在C語言里面,地址是不可更改的,所以不要把p=5理解成把指針p的地址改成5.

下面是瞎玩的:~。~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM