转自C语言*p、p以及&p的区别

前言:

先要理解地址和数据,你可以想象有很多盒子,每个盒子有对应的号码,那个号码叫做“地址”,而盒子里放的东西叫做“数据”。
上面就段理解了,*p和p的区别就不难解释了。
p是指针变量,用来存放地址,你可以认为是上面所说的盒子的号码,“ * ”是解引用操作符,你可以把它理解成打开盒子,p就是打开p号盒子,取出里面的数据。
简单来说,你记住,p存放的是地址,而
p是让程序去那个地址取出数据。

摘自《啊哈!算法》:
在C 语言中*号有三个用途,分别是:

  1. 乘号,用做乘法运算,例如5*6。
  2. 申明一个指针,在定义指针变量时使用,例如int *p;。
  3. 间接运算符,取得指针所指向的内存中的值,例如printf("%d",*p);。

总结:

假设我们定义一个指针p。
那么会经常使用到三个符号:
1,p;
2,*p;
3,&p;
初学者经常会感到很迷茫,到底这三个符号表示什么?

p是一个指针变量的名字,表示此指针变量指向的内存地址,如果使用%p来输出的话,它将是一个16进制数。

*p表示此指针指向的内存地址中存放的内容,一般是一个和指针类型一致的变量或者常量。 而我们知道,&是取地址运算符,&p就是取指针p的地址。

等会,怎么又来了个地址,它到底和p有什么区别?

区别:指针p同时也是个变量,既然是变量,编译器肯定要为其分配内存地址,就像程序中定义了一个int型的变量i,编译器要为其分配一块内存空间一样。

&p就表示编译器为变量p分配的内存地址,而因为p是一个指针变量,这种特殊的身份注定了它要指向另外一个内存地址,程序员按照程序的需要
让它指向一个内存地址,这个它指向的内存地址就用p表示。而且,p指向的地址中的内容就用*p表示。

*p和**p的区别

int *p :一级指针,表示p所指向的地址里面存放的是一个int类型的值
int **p :二级指针,表示p所指向的地址里面存放的是一个指向int类型的指针(即p指向的地址里面存放的是一个指向int的一级指针)
例如:
int i=10; //定义了一个整型变量
int *p=&i; //定义了一个指针指向这个变量
int **p1=&p; //定义了一个二级指针指向p指针
那么取出10的值方式为:
printf(“i=[%d]\n”,*p);
printf(“i=[%d]\n”,**p1);

C语言*p、p以及p的区别,*p和**p的区别相关推荐

  1. r语言和python-Python和R语言的区别_Python与R的区别和联系

    Python和R语言的区别_Python与R的区别和联系 可能问这个问题会很无脑,但是我还没有深入接触过Python,只是用过R语言.谁能帮我解答一下,这两者的主要区别呢?是否存在代替关系呢? 精彩解 ...

  2. C语言中的带参宏和带参函数的区别

    C语言中的带参宏和带参函数的区别 (1) 带参函数中的形参是变量,因此有类型检查.而带参宏只是简单的字符串替换. (2) 从程序执行的过程来看,带参宏是在预处理阶段被预处理器处理的.而带参函数是在程序 ...

  3. c语言函数声明中,static inline和extern inline的区别

    c语言函数声明中,static inline和extern inline的区别 "extern"关键字对于普通函数没有作用 "extern"和"sta ...

  4. java中的异常种类和区别以及处理机制和区别

    java中的异常种类和区别以及处理机制和区别 按照异常需要处理的时机分为编译时异常(也叫强制性异常)也叫 CheckedException 和运行时异常(也叫非强制性异常)也叫 RuntimeExce ...

  5. 计算机控制和dcs控制的区别,dcs与plc有什么区别?dcs和plc的区别

    dcs与plc有什么区别?dcs和plc的区别 在自动化领域,DCS和PLC是两个完全不同,又有些千丝万缕联系的概念,两者都是计算机技术和工业控制技术相结合的产物,我想从技术特点,发展方向等几个方面进 ...

  6. var 和 let的区别_let 和 var的区别

    js定义变量前言 1.js 定义变量 使用 var 或者let 2.js定义常量 使用 const 3.var 定义变量是用js语言诞生就有的: let定义变量是从ES6新语法开始的. 4.let定义 ...

  7. linux source和.的区别,source和.命令的区别

    source FileName 作用:在当前bash环境下读取并执行FileName中的命令. 注:该命令通常用命令"."来替代. 如:source .bash_rc 与 . .b ...

  8. SparkMapReduce的区别、多线程多进程的区别

    Spark&MapReduce的区别.多线程&多进程的区别 1.spark与hadoop区别: 2.Spark多线程运行, MR多进程运行 3.MR存在的问题: 4.线程和进程的区别: ...

  9. 现货跟期货有什么区别(现货和期货交易区别)

    现货和期货的区别? 期货交易和现货交易的区别如下: 期货交易与现货交易有相同的地方,如都是一种交易方式.都是真正意义上的买卖.涉及商品所有权的转移等,不同的地方有以下几点: (1)买卖的直接对象不同. ...

  10. YV12和I420的区别 yuv420和yuv420p的区别

    YV12和I420的区别   YV12和I420的区别        一般来说,直接采集到的视频数据是RGB24的格式,RGB24一帧的大小size=width×heigth×3 Bit,RGB32的 ...

最新文章

  1. 计算机科学与技术专业术语
  2. Swift 扩展存储属性
  3. linux 文件系统_Linux 虚拟文件系统
  4. python polar contour_Python将2darray的最后一行和第二列添加到最后位置 - Polar Contour图...
  5. CSS固定定位[相对浏览器] 相对定位[相对自己] 绝对定位[有relative的元素]
  6. office漏洞利用--获取shell
  7. python之路-操作系统
  8. JavaScript运行机制:event-loop
  9. 基于数组实现Java 自定义Stack栈类及应用
  10. iOS 自定义视频播放器
  11. 游戏制作之路(48)地形纹理工具
  12. windows系统清除电脑地址栏文件(夹)路径
  13. 使用keytool转换签名证书格式,keyStore、jks签名证书相互转换
  14. 论文笔记 DXSLAM: A Robust and Efficient Visual SLAM System with Deep Features
  15. FL Studio电音编曲软件V21中文完整版 安装下载教程
  16. Python3修改电脑mac地址
  17. phpize的安装和使用
  18. 2020第十一届蓝桥杯国赛JAVA B组真题解析(带源码及解析)
  19. 再看同义变换在百度搜索广告中的应用总结
  20. UE5 官方案例Lyra 全特性详解 16.背包系统Inventory System5

热门文章

  1. usee2008免费网络电视最新版下载
  2. scanf%[^\n]的进一步研究
  3. GBT 1.1-2020和GBT 1.2-2020最新国标PDF下载
  4. Win10下E3-1231 V3开启Intel虚拟化技术(vt-x)安装HAXM
  5. 仿链家地图找房_全网稀缺,完整链家地图找房的实现(一)
  6. LTE-4G网络普及
  7. html 状态 304,网站频繁出现304状态码的原因
  8. 萌新一手包App前后端开发日记(一)
  9. JetBrains学生账号的申请
  10. php获得屏幕宽度,PHP获取客户端屏幕宽度、高度及分辨率的方法