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

简介: 指针易混淆概念:*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为指向函数的指针,该函数返回一个整型值


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


目录
相关文章
|
7月前
|
存储 C语言
【c语言指针详解】指针的基本概念和用法
【c语言指针详解】指针的基本概念和用法
245 0
|
7月前
|
存储 编译器 数据库
指针(1)--对于指针基本概念的介绍
指针(1)--对于指针基本概念的介绍
77 0
|
7月前
|
存储 人工智能 编译器
【重学C++】【指针】一文看透:指针中容易混淆的四个概念、算数运算以及使用场景中容易忽视的细节
【重学C++】【指针】一文看透:指针中容易混淆的四个概念、算数运算以及使用场景中容易忽视的细节
111 1
|
存储
经常容易混淆的指针概念以及特殊指针
经常容易混淆的指针概念以及特殊指针
58 0
|
7月前
|
编译器 C语言 C++
深入探究C语言中的常量指针与野指针概念及其应用
深入探究C语言中的常量指针与野指针概念及其应用
66 1
|
7月前
|
存储
地址和指针的概念
地址和指针的概念
68 1
|
存储 算法 编译器
指针(一)------指针概念+指针类型+野指针+指针运算+二级指针
指针(一)------指针概念+指针类型+野指针+指针运算+二级指针
81 0
|
C语言 C++
C语言刷题(3)——指针概念
C语言刷题(3)——指针概念
C语言刷题(3)——指针概念
|
C语言
可能你看到的大部分教材里讲的指针和指针变量是一个概念,但是真的是这样吗?看完我这篇文章肯定会颠覆你的认知哦?
可能你看到的大部分教材里讲的指针和指针变量是一个概念,但是真的是这样吗?看完我这篇文章肯定会颠覆你的认知哦?
134 0
可能你看到的大部分教材里讲的指针和指针变量是一个概念,但是真的是这样吗?看完我这篇文章肯定会颠覆你的认知哦?