之前对*和&符号一直理解的比较浅显。只知道: 
*p好像表示的是一个指针; 
&p表示的是一个地址。 
然而这次当遇到了下面这个情况的时候: 
int a = 10; 
int *b = &a;

printf(“%d\n”, a); 
printf(“%d\n”, &a); 
printf(“%d\n”, b); 
printf(“%d\n”, *b);

结果: 
10 
6487620 
6487620 
10

一脸懵逼,为什么&a和*b的值不是一样?这才发现自己其实一点都没有搞懂。

经过学习后,总结出来: 
变量a 本质上代表一个存储单元。CPU通过该存储单元的地址访问该存储单元中的数据。所以a本来代表两个值:存储单元的地址和储单元中的数据。于是就有了二异性。为了消除这种二义性,C语言规定a表示存储单元中的数据,&a表示存储单元的地址。 
a存储单元中的数据可以是一个普通数值,也可以是另一个存储单元的地址,比如:a = &b; 语句就是将b的存储单元的地址存入a存储单元中。C语言规定*a代表a中存储的地址对应的存储单元中的数据,也就是访问*a就等于访问b,于是*a提供了通过a访问b中的数据的手段。

a表示a对应的存储单元中的数据。 
&a表示a对应的存储单元的地址。 
*a表示:首先,要求a对应的存储单元中的数据一定是另一个存储单元的地址。 
于是,*a表示另一个存储单元中的数据。 
当a声明的类型是int时,a中存储的是一个整数数值,通过a可以访问(读取或修改)这个数值。 
当a声明的类型是int*时,a中存储的是一个存储单元的地址,而该存储单元中存储的数据是一个整数数值;通过*a可以访问(读取或修改)这个数值。a == &*a 都是该存储单元的地址。 
当a声明的类型是int**时,a中存储的是一个存储单元的地址,而该存储单元中存储的数据是另外一个存储单元的地址,另外这个存储单元中存储的是一个整数数值;通过**a可以访问(读取或修改)这个数值。 

最后,C语言里地址叫指针。还有,在C语言中的数组本质上其实也是指针,即:*a 等同于 a[]。

int a = 10;

int *b = &a;

printf("%p\n",&a);    \\输出变量a自身地址

printf("%p\n", b);    \\输出指针b中指向的地址,即a地址

printf("%p\n", &b);    \\输出指针b自身的地址

printf("%d\n", a);    \\输出变量a中数据10

printf("%d\n", b);    \\输出指针b中存储的数据,5240892即为16进制004FF83C

printf("%p\n", b);    \\输出指正b中存储数据,以指针格式输出

printf("%d\n", *b);    \\输出指针b指向的地址内的数据,即a的数据

输出结果:

004FF83C
004FF83C
004FF830
10
5240892
004FF83C
10

综上:

&是取变量或指针自身的地址;

*是取指针中指向地址内的数据;

什么都不加,就是取该变量或指针中当前存储的数据。

C语言中的*和&符号的更多相关文章

  1. 浅谈C语言中的强符号、弱符号、强引用和弱引用

    摘自http://www.jb51.net/article/56924.htm 浅谈C语言中的强符号.弱符号.强引用和弱引用 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2014- ...

  2. 深入理解计算机系统(2.5)------C语言中的有符号数和无符号数以及扩展和截断数字

    上一篇博客我们讲解了计算机中整数的表示,包括无符号编码和补码编码,以及它们之间的互相转换,个人觉得那是非常重要的知识要点.这篇博客我们将介绍C语言中的有符号数和无符号数以及扩展和截断数字. 1.C语言 ...

  3. 关于C语言中的强符号、弱符号、强引用和弱引用的一些陋见,欢迎指正

    首先我表示很悲剧,在看<程序员的自我修养--链接.装载与库>之前我竟不知道C有强符号.弱符号.强引用和弱引用.在看到3.5.5节弱符号和强符号时,我感觉有些困惑,所以写下此篇,希望能和同样 ...

  4. 浅谈C语言中的强符号、弱符号、强引用和弱引用【转】

    转自:http://www.jb51.net/article/56924.htm 首先我表示很悲剧,在看<程序员的自我修养--链接.装载与库>之前我竟不知道C有强符号.弱符号.强引用和弱引 ...

  5. C语言中的强符号与弱符号

    转自:http://blog.csdn.net/astrotycoon/article/details/8008629 一.概述 在C语言中,函数和初始化的全局变量(包括显示初始化为0)是强符号,未初 ...

  6. C语言中的弱符号(weak)用法及实例

    一 符号概念: 在C语言中,有强符号和弱符号,符号简单来说就是函数.变量的名字,对于全局(非局部.非static)的函数和变量,能不能重名是有一定规矩的,强.弱符号就是针对这些全局函数和变量来说的. ...

  7. 《C语言深度剖析》学习笔记----C语言中的符号

    本节主要讲C语言中的各种符号,包括注释符.单引号双信号以及逻辑运算符等. 一.注释符 注释符号和注释在程序的预编译期就已经被解决了,在预编译期间,编译器会将注释符号和注释符号之间的部分简单的替换成为空 ...

  8. 【R语言入门】R语言中的变量与基本数据类型

    说明 在前一篇中,我们介绍了 R 语言和 R Studio 的安装,并简单的介绍了一个示例,接下来让我们由浅入深的学习 R 语言的相关知识. 本篇将主要介绍 R 语言的基本操作.变量和几种基本数据类型 ...

  9. scala中常用但其他语言不常见的符号含义

    本文旨在介绍Scala在其他语言中不太常见的符号含义,帮助理解Scala Code. 随着我对Scala学习的深入,我会不断增加该篇博文的内容. 修改记录 ----2016.11.23  新增scal ...

  10. 【 c语言中无符号和有符号的加法运算】【深入理解】--【sky原创】

    原文:[ c语言中无符号和有符号的加法运算][深入理解]--[sky原创]   第一题 #include<stdio.h> int main() { unsigned int a=6; i ...

随机推荐

  1. mongoose中的exec()有什么用?

    是什么? .exec() 和 .save() 一样是 Mongoose 的异步操作,都返回一个 thenable . 怎么用? 我们先定义一个 query 对象: const query = MyMo ...

  2. moectf2023的一些题

    [moectf]GUI 这是一道win32窗口程序 找到线程的回调函数 sub_740C94这个函数里有很多函数,意义不明,实际并不会对输入的字符串做出改变 回调函数里下断点,然后单步动调 sub_7 ...

  3. Flex 弹性布局备忘录

    概述 Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性 这也是我目前用的最多的一种布局方案,相比Grid布局此种布局方案相对较简单, ...

  4. 【Amadeus原创】群晖关闭局域网发现

    套件中心-媒体服务器,卸载.

  5. aspirate 工具

    dotnet tool aspirate https://www.nuget.org/packages/aspirate/0.1.40-preview 作为全局工具安装 dotnet tool ins ...

  6. 部署docker-registry+ui shell 域名证书-用户认证

    #部署docker-registry+ui shell docker registry 配置域名证书, 用户密码认证, 轻量UI ansible部署docker-registry+ui https:/ ...

  7. gdb 初次运行卡住 Starting program: [New Thread 0x1103 of process 843]

    安装完后gdb一般会有提示: ==> gdbgdb requires special privileges to access Mach ports.You will need to codes ...

  8. .NET周刊【12月第3期 2024-12-15】

    国内文章 重磅推出 Sdcb Chats:一个全新的开源大语言模型前端 https://www.cnblogs.com/sdcb/p/18597030/sdcb-chats-intro Sdcb Ch ...

  9. Qt/C++音视频开发79-采集websocket视频流/打开ws开头的地址/音视频同步/保存到MP4文件/视频回放

    一.前言 随着音视频的爆发式的增长,各种推拉流应用场景应运而生,基本上都要求各个端都能查看实时视频流,比如PC端.手机端.网页端,在网页端用websocket来接收并解码实时视频流显示,是一个非常常规 ...

  10. Qt/C++音视频开发62-电子放大/按下选择区域放大显示/任意选取区域放大

    一.前言 电子放大这个功能思考了很久,也是一直拖到近期才静下心来完整这个小功能,这个功能的前提,主要得益于之前把滤镜打通了,玩出花样来了,只要传入对应的滤镜字符串,就可以实现各种各样的效果,然后查阅滤 ...