在《C和指针》上面看到“解引用”这个名词,就好奇的去查了查。

例:

 #include <stdio.h>
#include <stdlib.h> int main(void)
{
int a=;
int *p=&a;
*p=;//这就是一个解引用
system("PAUSE");
return ;
}

在百度上面的解释是:"'解引用',我倒觉得可以从另一个角度理解,"*"的作用是引用指针指向的变量值,引用其实就是引用该变量的地址,"解"就是把该地址对应的东西解开,解出来,就像打开一个包裹一样,那就是该变量的值了,所以称为"解引用"。也就是说,解引用是返回内存地址中保存的值。",个人理解就是将指针p中的地址给解析出来。

看了之后还是迷糊迷糊的,于是上Google上查了“*”,维基上的解释是:“The asterisk is used to deference or to declare a pointer variable.”,在*p=5这里当然是前者的deferece了,但取消引用,什么是取消引用,取消什么呢?自己还是没有一个准确的概念,于是拿着这个问题请教了自己的师哥。花了近2个小时,终于明白了。

 #include <stdio.h>
#include <stdlib.h> int main(void)
{
int a=;
int *p;
p=&a;
*p=;
printf("%d\n",*p);
system("PAUSE");
return ;
}

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

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

int a=;

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

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

然后,

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

接着

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

最后

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

最后两行代码:一个写入数据,一个读取数据。这个就是解引用;

 #include <stdio.h>
#include <stdlib.h>
3 int main(void)
 {
int a=;
int *p;
p=;
system("PAUSE");
return ;
}//这个代码不会炸(崩溃)
  #include <stdio.h>
#include <stdlib.h> int main(void)
{
int a=;
int *p;
p=;
*p=;
system("PAUSE");
return ;
}//这个代码炸了

原因就是:p=5;表示将整型值5存储到指针p中(在指针p中是作为地址存在哦)

     *p=5;表示将整型值5储存到指针p小盒子里面的地址指向的那个小盒子里面。(地址5你知道有东西吗!)

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

下面是瞎玩的:~。~

C语言--解引用的更多相关文章

  1. 二维数组(解引用、指针数组、数组的指针)——C语言

    二维数组 在说二维数组前先来说下一维数组中的指针数组和和数组的指针 一.一维数组中指针数组和数组指针的区别 指针数组: ]; []的优先级比*高,首先它是一个数组,它的大小是5,它里面存放的数据类型是 ...

  2. 取地址与解引用 C指针浅析

    C语言指针入门需要掌握的两个概念就是取地址&和解引用*,下面我们按例子来理解这两个符号的使用. int main() { int a = 0; int* pa = &a;//取地址操作 ...

  3. 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)

    一.初步了解--指针与取地址 先看程序: #include<cstdio> int main(void) { int num = 7; int *p = &num; printf( ...

  4. 指针 取地址& 解引用 *

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtAAAACNCAIAAAARutrLAAAgAElEQVR4nOydd3wcxd3/R13uvdsUY2

  5. “段错误(segment fault)”、“非法操作,该内存地址不能read/write” 非法指针解引用造成的错误。

    小结: 1. “段错误(segment fault)”.“非法操作,该内存地址不能read/write”非法指针解引用造成的错误. <程序员的自我修养 : 链接.装载与库> Q 我写的程序 ...

  6. 【翻译】 Windows 内核漏洞学习—空指针解引用

    Windows Kernel Exploitation – NullPointer Dereference 原文地址:https://osandamalith.com/2017/06/22/windo ...

  7. Windows 内核漏洞学习—空指针解引用

    原标题:Windows Kernel Exploitation – NullPointer Dereference 原文地址:https://osandamalith.com/2017/06/22/w ...

  8. Golang对方法接收者变量的自动“取引用”和“解引用”

    原文:https://blog.csdn.net/u014633283/article/details/83826413 --------------------------------------- ...

  9. 段错误 “段错误(segment fault)”、“非法操作,该内存地址不能read/write” 非法指针解引用造成的错误。

    [root@test after_fc_distributed]# ./ffmpeg-linux64-v3.3.1 -i "concat:mymp3tmp/test_0.mp3|mymp3t ...

随机推荐

  1. linux API函数大全

    获取当前执行路径:getcwd1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAdd ...

  2. UWP 保存Image的图片到本地文件

    上一篇说显示一张图片到Image控件,比较简单. 那个假设我Image控件有图片了,想保存到本地,这个就要花心思了,不过也不复杂的... var rtb = new RenderTargetBitma ...

  3. GET方式提交中文编码问题以及三种解决方式

    GET方式提交在WEB中是非常常用的方式,有时候我们在使用GET方式提交请求不得不提交中文,但是TOMCAT等容器对于GET方式的编码问题总是让人折腾. 先说说流程吧: 我们的内容使用GET方式发送, ...

  4. PHP curl_setopt函数用法介绍

    [导读] curl_setopt函数是php中一个重要的函数,它可以模仿用户的一些行为,如模仿用户登录,注册等等一些用户可操作的行为哦.bool curl_setopt (int ch, string ...

  5. MyBatis简单使用

    MyBatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使 ...

  6. (转)java内部类详解

    本文转自http://www.cnblogs.com/dolphin0520/p/3811445.html,谢谢作者 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能 ...

  7. 自学Zabbix之路

    自学Zabbix之路[第一回]:初识Zabbix 1.1 自学Zabbix1.1-简介 1.2 自学Zabbix1.2-zabbix特性 1.3 自学Zabbix1.3-zabbix进程 自学Zabb ...

  8. 深入理解计算机系统_3e 第八章家庭作业 CS:APP3e chapter 8 homework

    8.9 关于并行的定义我之前写过一篇文章,参考: 并发与并行的区别 The differences between Concurrency and Parallel +---------------- ...

  9. 关于Idea中右边的maven projects窗口找不到了如何调出来

    关于Idea中右边的maven  projects窗口找不到了如何调出来? 具体的idea版本我不太清楚,我用的是2016版,其他版本应该也是一样的. 首先idea自带了maven控件,不像Eclip ...

  10. IntelliJ IDEA 设置Output (输出窗口)窗口字体大小

    Settings-->Editor-->Colors&Fonts-->Console Font 如图: 字体调好了以后使用起来眼睛就轻松多了