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

(1)a[1]和&a[1]

a[1]:二维数组的第二行元素,即a[1]是以a[1][0]开头的一维数组,类型是一级指针

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

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

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

答:

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

(3)a[1]+2,&a[1][2]

a[1]+2,&a[1][2]和*(a+1)+2

都表示 1行2列元素a[1][2]的地址

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

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

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

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

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

(5)int(*p)[n],int *p[n]

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

例如:int(*p)[4]

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

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

例如:int *p[4]

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

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

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

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

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

相关推荐
算法鑫探19 小时前
闰年判断:C语言实战解析
c语言·数据结构·算法·新人首发
WBluuue19 小时前
数据结构与算法:康托展开、约瑟夫环、完美洗牌
c++·算法
木子墨51619 小时前
LeetCode 热题 100 精讲 | 并查集篇:最长连续序列 · 岛屿数量 · 省份数量 · 冗余连接 · 等式方程的可满足性
数据结构·c++·算法·leetcode
浅时光_c19 小时前
14 结构体 共用体 枚举类型
c语言
王老师青少年编程20 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:均分纸牌
c++·算法·编程·贪心·csp·信奥赛·均分纸牌
EQUINOX120 小时前
2026年码蹄杯 本科院校赛道&青少年挑战赛道提高组初赛(省赛)第一场,个人题解
算法
萝卜小白20 小时前
算法实习Day04-MinerU2.5-pro
人工智能·算法·机器学习
Liangwei Lin20 小时前
洛谷 P3133 [USACO16JAN] Radio Contact G
数据结构·算法
weixin_5134499621 小时前
PCA、SVD 、 ICP 、kd-tree算法的简单整理总结
c++·人工智能·学习·算法·机器人
code_pgf21 小时前
Qwen2.5-VL 算法解析
人工智能·深度学习·算法·transformer