C语言指针进阶用法详解与实践(一)
  TEZNKK3IfmPf 2023年11月14日 32 0

一:字符指针:

例如:普通的字符指针

C语言指针进阶用法详解与实践(一)

这里的指针p指向的内容是可以修改的。

例如:直接将字符串存放在指针里面

C语言指针进阶用法详解与实践(一)

这种做法实际上是将字符串的首元素地址放进a和b中,因为字符串是相同的,所以内存中开辟的是同一个空间,因此注意一下,a和b的首元素的地址是一样的。

如果要打印两个元素:

C语言指针进阶用法详解与实践(一)


二、指针数组:

顾名思义就是定义一个数组里面存放的是指针变量而已。可以理解为指针的数组

C语言指针进阶用法详解与实践(一)

圈划出来的是变量的类型,如第一个类型就是int*,第二个就是char*,第三个就是float*

同理可得到:

C语言指针进阶用法详解与实践(一)

三、数组指针:理解为数组的指针 

C语言指针进阶用法详解与实践(一)

理解方式:首先,*与p先结合,说明p是一个指针变量,之后说明了p指向了一个总共含有5个元素的数组,最后说明了元素的类型是int类型。

说明:这里要注意我们一定要使p与*先结合,因为[]的优先级是高于*号的,如果不加括号,就是代表一个指针数组。

四、&数组名VS数组名:

看一段代码:

C语言指针进阶用法详解与实践(一)

C语言指针进阶用法详解与实践(一)


结果是相同的。

再看一段代码:

C语言指针进阶用法详解与实践(一)

可以发现,两个结果的差值为40。

那么为什么会出现这种差别呢???

解释:单独使用arr代表取出数组的首元素的地址,这个指针相当于是int*指针,而&arr代表的是取出整个数组的地址,但是还是将首元素的地址存放在其中,但是它的类型却是int(*p)[10],这是一个数组指针。所以,打印它们的地址,都是一样的,都是首元素的地址。但是+1的话,arr+1代表跳过一个元素,&arr+1代表跳过一个数组,int类型一个数据大小为4,所以地址最后也就相差了40。

C语言指针进阶用法详解与实践(一)

运用实例:说出这个代码代表的含义:

C语言指针进阶用法详解与实践(一)

    解释:首先,这个parr3是一个指针,但是parr3要先和[10]结合,这就说明它指向一个含有10个元素的数组,然后看外层的信息,这个数组中存放的是数组指针,具体地说,这个数组指针指向的是含有5个int类型元素的数组

C语言指针进阶用法详解与实践(一)

五、一维数组传参

例子:

C语言指针进阶用法详解与实践(一)

传参时注意传过去的参数要要用一样类型的数据接收就行,比如一维数组数组名传过去的就是首元素的地址,只要用相应的数据接收就行。


六、二维数组传参:

C语言指针进阶用法详解与实践(一)

注意点:还是注意形参与实参的数据类型是否一致。

七、一级指针传参:

例子:

C语言指针进阶用法详解与实践(一)


八、二级指针传参:

例子:

C语言指针进阶用法详解与实践(一)

这里的两种写法都是可以的。&p取出的是int*p的地址,pp本身就是二级指针

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年03月29日   102   0   0 c语言字符
  TEZNKK3IfmPf   19天前   22   0   0 指针C++
  TEZNKK3IfmPf   2024年03月30日   147   0   0 C++c语言
  TEZNKK3IfmPf   2024年04月19日   53   0   0 进程c语言
TEZNKK3IfmPf