当前位置: 首页 > news >正文

不同情况下*p和*p的区别(指针)

一说到指针,不少同学就会觉得云里雾里。首先要明白,指针和地址是一个概念;然后明白指针和指针变量的区别。

先理解地址和数据,想象内存里面是一个个的小盒子,每个盒子对应一个编号,这个编号就是地址,盒子里存放的就是数据。

&是取地址运算符,如有 int a; 即有一个小盒子里面存放的数据起名叫a,&a就是取a的地址,即该盒子的编号。

*(地址)是取值运算符,这里*是解引用操作符,可以理解成打开对应地址编号的盒子,取出里面的数据。*(&a) 就是打开a对应的小盒子,取出里面的数据,即*(&a)和a等价。

我们定义一个指针变量int *p; p是指针变量,专门用来存放地址。

int *p=&a;相当于int *p; p=&a;

p存放的是a的地址,*p也等价于 a。指针变量p既然是变量,也同变量a一样对应一个小盒子,也有一个地址编号,&p就是取指针p的地址。这样就好理解二级指针了。

*p和**p的区别

int *p :一级指针,表示p所指向的地址里面存放的是一个int类型的值

int **p :二级指针,表示p所指向的地址里面存放的是一个指向int类型的指针(即p指向的地址里面存放的是一个指向int的一级指针)

例:

inta=5;//定义整形变量
int*p=&a;//定义一个指针指向这个变量
int**p1=&p;//定义一个二级指针指向p指针
/*   那么取出5的方式都有哪些呢? */printf("a=%d",a);printf("a=%d",*p);printf("a=%d",**p1);

以上3行输出的值都是5 。

回过来看标题问题:*&p和&*p

根据运算优先级,*&p 等价于*(&p)。&*p 等价于&(*p)。

1、如果p是int *指针变量,那么*&p = p,&*p = p,都是p,但还没定义p指向哪,存的是谁的地址。

2、如果p是一个int变量,那么*&p = p;而&*p是非法的,因为*p非法。

比如int p =10;那么*&p = *(&p) = p = 10(即从p的地址取值),而&*p = &(*p) 则非法,因为p=10,*10是取内存地址为10的值,这在c语言中是不合法的。

http://www.lryc.cn/news/20738.html

相关文章:

  • Vuex基础语法
  • 刚上岸字节测试开发岗,全网最真实的大厂面试真题
  • Mac监控键盘输入并执行动作
  • Transformer输出张量的值全部相同?!
  • 港科夜闻|全国政协副主席梁振英先生率香港媒体高管团到访香港科大(广州)...
  • XML调用 CAPL Test Function
  • Linux网络配置(NAT)
  • 数据结构——第二章 线性表(8)——线性表总结
  • 3.7寸按键翻页工牌
  • 西北工业大学大学物理(II)选填解析2019-2020期末
  • [计算机网络(第八版)]第一章 概述(章节测试/章节作业)
  • 华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典
  • 电子科技大学数据库与软件工程三
  • 华为开源自研AI框架昇思MindSpore数据变换:Transforms
  • 软件测试之边界值测试法
  • 【华为OD机试模拟题】用 C++ 实现 - 最近的点(2023.Q1)
  • Qt windeployqt.exe 打包qml
  • 【人脸识别】CurricularFace:自适应课程学习人脸识别损失函数
  • springmvc之rest风格(RESTFUL)
  • django项目实战十四(django+bootstrap实现增删改查)进阶混合数据使用modelform上传
  • 2023年CDGA考试模拟题库(1-100)
  • HTML常用基础内容总结
  • Gorm-学习笔记
  • 【Neo4j】图数据库CypherQueryLanguage随笔
  • STM32Cube串口USART发送接收数据
  • OpenFeign详解
  • python多线程网络编程
  • BFS-走迷宫
  • 【蓝牙mesh】Lower协议层介绍
  • Java-重排序,happens-before 和 as-if-serial 语义