zoukankan      html  css  js  c++  java
  • 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
    ",*p);
    11     system("PAUSE");
    12     return 0;
    13 }

      解引用(看例题),相当于使指针p指向于a。我们可以先一步一步理解:

    在内存中内存是一块一块的,这里的编号就是他们的地址。

    int a=10;

    先声明一个变量a给他一个小盒子,然后把10装进这个小盒子里面。

    然后对指针p,先分配给他一个小盒子(指针也是变量)。

    然后,

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

     接着

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

    最后

    printf("%d
    ",*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.

    下面是瞎玩的:~。~

  • 相关阅读:
    iOS-关于博客园博客到简书平台的迁移
    iOS-工作经验+资料分享(长期更新)
    iOS-公司开发者账号的申请和注册(原创+亲身+2016年申请+附带与邓白氏公司的往来邮件截图)
    iOS-HTML-02
    iOS-HTML-01
    iOS-保存照片或者视频到自定义相薄中以及读取数据
    iOS-UITableView的优化(纯手打原创)
    iOS-多线程之GCD(原创)
    iOS-绘图(Quartz2D)的简单使用(原创)
    iOS-Cocoapods
  • 原文地址:https://www.cnblogs.com/Mayfly-nymph/p/8213837.html
Copyright © 2011-2022 走看看