C语言--解引用
在《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语言--解引用的更多相关文章
- 二维数组(解引用、指针数组、数组的指针)——C语言
二维数组 在说二维数组前先来说下一维数组中的指针数组和和数组的指针 一.一维数组中指针数组和数组指针的区别 指针数组: ]; []的优先级比*高,首先它是一个数组,它的大小是5,它里面存放的数据类型是 ...
- 取地址与解引用 C指针浅析
C语言指针入门需要掌握的两个概念就是取地址&和解引用*,下面我们按例子来理解这两个符号的使用. int main() { int a = 0; int* pa = &a;//取地址操作 ...
- 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)
一.初步了解--指针与取地址 先看程序: #include<cstdio> int main(void) { int num = 7; int *p = # printf( ...
- 指针 取地址& 解引用 *
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtAAAACNCAIAAAARutrLAAAgAElEQVR4nOydd3wcxd3/R13uvdsUY2
- “段错误(segment fault)”、“非法操作,该内存地址不能read/write” 非法指针解引用造成的错误。
小结: 1. “段错误(segment fault)”.“非法操作,该内存地址不能read/write”非法指针解引用造成的错误. <程序员的自我修养 : 链接.装载与库> Q 我写的程序 ...
- 【翻译】 Windows 内核漏洞学习—空指针解引用
Windows Kernel Exploitation – NullPointer Dereference 原文地址:https://osandamalith.com/2017/06/22/windo ...
- Windows 内核漏洞学习—空指针解引用
原标题:Windows Kernel Exploitation – NullPointer Dereference 原文地址:https://osandamalith.com/2017/06/22/w ...
- Golang对方法接收者变量的自动“取引用”和“解引用”
原文:https://blog.csdn.net/u014633283/article/details/83826413 --------------------------------------- ...
- 段错误 “段错误(segment fault)”、“非法操作,该内存地址不能read/write” 非法指针解引用造成的错误。
[root@test after_fc_distributed]# ./ffmpeg-linux64-v3.3.1 -i "concat:mymp3tmp/test_0.mp3|mymp3t ...
随机推荐
- LINQ学习系列-----3.1 查询非泛型集合
一.问题起源 LINQ to object在设计时,是配合IEnumerable<T>接口的泛型集合类型使用的,例如字典.数组.List<T>等,但是对于继承了IEnumera ...
- nyoj 2 括号配对问题 栈
nyoj 2 括号配对问题 题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=2 思路: 栈:'(' '['入栈,遇到 ']' ')'出栈 ...
- 域名和ip不能访问的原因
centos的话可能默认可能会有firewalld,可以执行 systemctl stop firewalld systemctl disable firewalld 禁用后在看看,前提都是域名得备案 ...
- 360提供的php防注入代码
<?php //Code By Safe3 function customError($errno, $errstr, $errfile, $errline) { echo "< ...
- Linux基础-最基础
Linux基础 为了更好的学习知识,开通此博客,以前博客丢了...记录一下知识点,希望能在这里与大家互相学习交流. 20171113 14:00 Linux基础-基本知识 Linux树状文件系统结构 ...
- windows添加默认路由
由于GW的原因,我们无法使用强大的google,身为技术屌丝,这是不能容忍的,于是乎使用了VPN,但是VPN连上之后,悲剧发生了,我的服务器连不上了,怎么整 原来一切都是很简单,在windows上添加 ...
- zeppelin0.7.3源码编译
操作系统: Centos7.X Python版本: Python2.7 Maven版本:3.1.* Git:1.8.3.* JAVA:java1.7+ node npm bower grunt 每次执 ...
- 17. ZooKeeper常见的分布式系统任务——屏障
以后几节中主要介绍以下内容: 如何执行领导者选举,组员管理和两阶段提交协议等常见的分布式系统任务 如何实现一些分布式数据结构,如屏障(barrier),锁(lock)和队列(queue) 这一章中概述 ...
- vue 二进制文件的下载(解决乱码和解压报错)
问题描述:项目中使用的是vue框架进行开发,因为文件下载存在权限问题,所以并不能通过 a 链接的 href 属性直接赋值 URL进行下载, (如果你的文件没有下载权限,可以直接通过href属性赋值UR ...
- 如何在Raspberry Pi 3B中安装Windows 10 IoT Core
Windows 10 IoT Core简介 Windows 10 IoT是微软专门为物联网生态打造的操作系统,Windows 10 IoT Core则是Windows 10 IoT 操作系统的核心版本 ...