指针易混淆概念:*p++,*(p++),++(*p)

(1)a1和&a1

a1:二维数组的第二行元素,即a1是以a10开头的一维数组,类型是一级指针

&a1:二维数组的第二行元素的地址,类型是二级指针

(2)a+1与*(a+1)的值相同

很多人认为,a+1是地址,那么*(a+1)就是该地址指向的存储单元的内容,为什么会是一个值

答:

a+1是二维数组序号为1的行的起始地址,而*(a+1)并不是a+1单元的内容,因为a+1不是一个数组元素的地址,也就谈不上是存储单元的内容了,所以*(a+1)就是a1,而a1是一维数组名,指向a10,所以*(a+1)和a1都是a10的地址

(3)a1+2,&a12

a1+2,&a12和*(a+1)+2

都表示 1行2列元素a12的地址

(4)*p++,*(p++),++(*p)

因为++和*同优先级,结合方向为自右向左,所以*p++=*(p++)

*(p++):先取*p值,再使p加1,以&a0为例,若输出*(p++),则得到a0

*(++p):先使p加1,再取*p的值,也以&a0为例,若输出*(++p)得到a1

++(*p):表示p所指向的元素加1,如果p=a,++(*p)相当于++a0,若a0=3,那么++(*p)=4,注意是a0的值加1,而不是指针p的值+1

(5)int(*p)n,int *pn

int (*p)n 表示定义一个指针,指向一个intn型的指针。

例如:int(*p)4

p为指向包含4个元素的一维数组的指针变量

int *pn 就是一个指针数组, 数据类型为int ,元素为地址(变量地址,数组地址,函数地址等),也就是说定义了n个不同指向int型的指针。在字符优先级表中, 的优先级大于*,所以,int *pn 就等价于int *(pn)

例如:int *p4

定义指针数组p,他由4个指向整型数据的指针元素组成

(6) int *p(),int (*p)()

int *p():p为返回一个指针的函数,该指针指向整形数据

int (*p)():p为指向函数的指针,该函数返回一个整型值

先记录这一些,再遇到问题会继续记录下来💓💓💓

相关推荐
怕浪猫1 小时前
GEO 优化到底是什么?AI时代内容创作者必须懂的新技能
算法·面试·github
朝朝辞暮i2 小时前
C++ 第 23 课:class —— 开始真正进入面向对象
开发语言·c++·算法
Evand J2 小时前
【MATLAB例程】三维RRT+APF避障路径规划与到达角(AOA)定位算法|三维路径优化与定位仿真例程
算法·matlab·路径规划·代码·定位·rrt·aoa
小师兄吃牛肉3 小时前
C语言篇:宏
c语言·开发语言
炸膛坦客3 小时前
单片机开发工具篇:(十四)配置输出 .map 文件及其本地路径
c语言·单片机·嵌入式硬件
weixin_307779134 小时前
有限产能智能排产与动态重排智能体:从需求解构到技术实现
开发语言·人工智能·算法·架构
kakakahahahaha4 小时前
Windows C盘临时文件清理:%temp%、Windows Temp、Prefetch、Windows.old与hiberfil.sys处理指南
c语言·开发语言·windows
朝朝辞暮i4 小时前
C++ 第 27 课:智能指针 shared_ptr
开发语言·c++·算法
朝朝辞暮i5 小时前
C++ 第 29 课:回调函数 Callback
开发语言·c++·算法
Godspeed Zhao5 小时前
现代智能雷达技术14——算法(0)
线性代数·算法·雷达