C语言*p、p以及p的区别,*p和**p的区别
转自C语言*p、p以及&p的区别
前言:
先要理解地址和数据,你可以想象有很多盒子,每个盒子有对应的号码,那个号码叫做“地址”,而盒子里放的东西叫做“数据”。
上面就段理解了,*p和p的区别就不难解释了。
p是指针变量,用来存放地址,你可以认为是上面所说的盒子的号码,“ * ”是解引用操作符,你可以把它理解成打开盒子,p就是打开p号盒子,取出里面的数据。
简单来说,你记住,p存放的是地址,而p是让程序去那个地址取出数据。
摘自《啊哈!算法》:
在C 语言中*号有三个用途,分别是:
- 乘号,用做乘法运算,例如5*6。
- 申明一个指针,在定义指针变量时使用,例如int *p;。
- 间接运算符,取得指针所指向的内存中的值,例如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的区别相关推荐
- r语言和python-Python和R语言的区别_Python与R的区别和联系
Python和R语言的区别_Python与R的区别和联系 可能问这个问题会很无脑,但是我还没有深入接触过Python,只是用过R语言.谁能帮我解答一下,这两者的主要区别呢?是否存在代替关系呢? 精彩解 ...
- C语言中的带参宏和带参函数的区别
C语言中的带参宏和带参函数的区别 (1) 带参函数中的形参是变量,因此有类型检查.而带参宏只是简单的字符串替换. (2) 从程序执行的过程来看,带参宏是在预处理阶段被预处理器处理的.而带参函数是在程序 ...
- c语言函数声明中,static inline和extern inline的区别
c语言函数声明中,static inline和extern inline的区别 "extern"关键字对于普通函数没有作用 "extern"和"sta ...
- java中的异常种类和区别以及处理机制和区别
java中的异常种类和区别以及处理机制和区别 按照异常需要处理的时机分为编译时异常(也叫强制性异常)也叫 CheckedException 和运行时异常(也叫非强制性异常)也叫 RuntimeExce ...
- 计算机控制和dcs控制的区别,dcs与plc有什么区别?dcs和plc的区别
dcs与plc有什么区别?dcs和plc的区别 在自动化领域,DCS和PLC是两个完全不同,又有些千丝万缕联系的概念,两者都是计算机技术和工业控制技术相结合的产物,我想从技术特点,发展方向等几个方面进 ...
- var 和 let的区别_let 和 var的区别
js定义变量前言 1.js 定义变量 使用 var 或者let 2.js定义常量 使用 const 3.var 定义变量是用js语言诞生就有的: let定义变量是从ES6新语法开始的. 4.let定义 ...
- linux source和.的区别,source和.命令的区别
source FileName 作用:在当前bash环境下读取并执行FileName中的命令. 注:该命令通常用命令"."来替代. 如:source .bash_rc 与 . .b ...
- SparkMapReduce的区别、多线程多进程的区别
Spark&MapReduce的区别.多线程&多进程的区别 1.spark与hadoop区别: 2.Spark多线程运行, MR多进程运行 3.MR存在的问题: 4.线程和进程的区别: ...
- 现货跟期货有什么区别(现货和期货交易区别)
现货和期货的区别? 期货交易和现货交易的区别如下: 期货交易与现货交易有相同的地方,如都是一种交易方式.都是真正意义上的买卖.涉及商品所有权的转移等,不同的地方有以下几点: (1)买卖的直接对象不同. ...
- YV12和I420的区别 yuv420和yuv420p的区别
YV12和I420的区别 YV12和I420的区别 一般来说,直接采集到的视频数据是RGB24的格式,RGB24一帧的大小size=width×heigth×3 Bit,RGB32的 ...
最新文章
- 计算机科学与技术专业术语
- Swift 扩展存储属性
- linux 文件系统_Linux 虚拟文件系统
- python polar contour_Python将2darray的最后一行和第二列添加到最后位置 - Polar Contour图...
- CSS固定定位[相对浏览器] 相对定位[相对自己] 绝对定位[有relative的元素]
- office漏洞利用--获取shell
- python之路-操作系统
- JavaScript运行机制:event-loop
- 基于数组实现Java 自定义Stack栈类及应用
- iOS 自定义视频播放器
- 游戏制作之路(48)地形纹理工具
- windows系统清除电脑地址栏文件(夹)路径
- 使用keytool转换签名证书格式,keyStore、jks签名证书相互转换
- 论文笔记 DXSLAM: A Robust and Efficient Visual SLAM System with Deep Features
- FL Studio电音编曲软件V21中文完整版 安装下载教程
- Python3修改电脑mac地址
- phpize的安装和使用
- 2020第十一届蓝桥杯国赛JAVA B组真题解析(带源码及解析)
- 再看同义变换在百度搜索广告中的应用总结
- UE5 官方案例Lyra 全特性详解 16.背包系统Inventory System5
热门文章
- usee2008免费网络电视最新版下载
- scanf%[^\n]的进一步研究
- GBT 1.1-2020和GBT 1.2-2020最新国标PDF下载
- Win10下E3-1231 V3开启Intel虚拟化技术(vt-x)安装HAXM
- 仿链家地图找房_全网稀缺,完整链家地图找房的实现(一)
- LTE-4G网络普及
- html 状态 304,网站频繁出现304状态码的原因
- 萌新一手包App前后端开发日记(一)
- JetBrains学生账号的申请
- php获得屏幕宽度,PHP获取客户端屏幕宽度、高度及分辨率的方法