【C】指针——知识点大全(详细,简洁,含例题)(一)

简介: 【C】指针——知识点大全(详细,简洁,含例题)

一.指针的基本概念

指针就是个变量,用来存放地址(地址唯一标识一块内存空间)

指针的大小是固定的4/8个字节(32位平台/64位平台)

指针是有类型的,指针的类型决定了“指针的+-整数的步长”,以及解引用时候的权限

指针之间存在运算

二.理解一级指针,二级指针

指针:即一个指针变量指向一份普通类型的数据,因为指针保存了那个数据的地址,可以通过解引用找到它(p1找到a)

一级指针图示:

2.二级指针传参

二级指针:即一个指针变量指向指针,因为指针保存了那个数据的地址,可以通过两次解引用找到它(p2解引用找到p1,再解引用找到a)

二级指针图示:

精华.二级指针的实际应用场景: 链表的增删查改(逐步探究)

我们可以观察如图所示的情况:

说明:

  • pphead是函数SLPushBack中接收plist地址的指针
  • 函数SLPuchBack实现的是尾插功能,tail指针变量存储尾指针newnode是malloc一个新节点以后存储新节点的指针

  • 当SLPushBack()函数结束后,会返还空间,此时结构体plist再也找不到在堆上的链表
  • 解决方法:一级指针!让plist指向头指针(如果头指针不可被修改)guard

  • 但是如果头指针不是哨兵位的头节点(guard),而是可以被删除的结点呢?
  • 解决方法:二级指针!每一次调用函数,都会把plist指向头指针

三.字符指针

1.字符指针指向常量字符串

字符指针指向常量字符串原理:指针指向字符串首元素的地址

理解图示:

PS:为满足“常量字符串不可修改”,需改进:“指针前加上const

*加上const后的数据在内存中存储的情况

编译器从内存优化的角度处理,数据只会存放到同一个地址

2.利用字符指针打印字符串

打印原理:打印字符串只需要首元素地址

1. const char*ps="abcdef";
2. printf("%s\n",ps);

四.指针数组

指针数组类型:类型 * [ n ]

1.应用:存储字符串组

2.应用:模拟二维数组

五.&数组名 / &数组名[ ] / 数组名

引入:我们知道arr是数组名即首元素地址,那&arr是什么?

结论:

  • 除了在sizeof()中,在&arr中,arr(数组名)指的不是数组首元素的地址
  • &arr的类型是数组指针(例:int(*pa)[10])
  • &arr[0]与arr的类型是指针(例:int*

六.指针类型决定步长(演示)

要点:&arr取出的是整个数组的地址,+1后则跳过整个数组



相关文章
|
7月前
|
编译器 C语言
C语言进阶⑪(指针上)(知识点和对应练习)回调函数模拟实现qsort。(下)
C语言进阶⑪(指针上)(知识点和对应练习)回调函数模拟实现qsort。
44 0
|
7月前
|
存储 编译器 C语言
C语言初阶⑦(指针初阶)知识点+笔试题(上)
C语言初阶⑦(指针初阶)知识点+笔试题
45 0
|
6月前
|
C语言
C语言----关于二维数组传参的本质相关的知识点(数组指针、指针数组)
C语言----关于二维数组传参的本质相关的知识点(数组指针、指针数组)
|
7月前
|
存储 程序员 编译器
【初阶】C语言指针详解——指针必备的7大知识点
【初阶】C语言指针详解——指针必备的7大知识点
|
7月前
|
存储 C语言
C语言进阶⑪(指针上)(知识点和对应练习)回调函数模拟实现qsort。(中)
C语言进阶⑪(指针上)(知识点和对应练习)回调函数模拟实现qsort。
40 0
|
7月前
|
存储 C语言 C++
C语言进阶⑪(指针上)(知识点和对应练习)回调函数模拟实现qsort。(上)
C语言进阶⑪(指针上)(知识点和对应练习)回调函数模拟实现qsort。
28 0
|
7月前
|
存储 编译器 C语言
C语言初阶⑦(指针初阶)知识点+笔试题(下)
C语言初阶⑦(指针初阶)知识点+笔试题
48 0
|
7月前
|
C语言
C语言:指针典型例题剖析
C语言:指针典型例题剖析
|
7月前
|
存储 C++ 容器
C/C++常见的易模糊知识点(结构体、指针、STL)
C/C++常见的易模糊知识点(结构体、指针、STL)
C/C++常见的易模糊知识点(结构体、指针、STL)