【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后则跳过整个数组



相关文章
|
2月前
|
C语言
C语言:指针典型例题剖析
C语言:指针典型例题剖析
|
3月前
|
存储 C++ 容器
C/C++常见的易模糊知识点(结构体、指针、STL)
C/C++常见的易模糊知识点(结构体、指针、STL)
C/C++常见的易模糊知识点(结构体、指针、STL)
|
4月前
|
存储 程序员 C语言
指针一些关键知识点和难点的总结
指针一些关键知识点和难点的总结
49 0
|
8月前
|
存储 安全 C语言
C语言知识点之 指针1
C语言知识点之 指针1
43 0
|
9月前
|
C语言
【C语言】让你不再害怕“指针”【知识点详解】
【C语言】让你不再害怕“指针”【知识点详解】
56 0
|
9月前
|
Perl
初阶指针知识点
初阶指针知识点
|
10月前
|
安全 Java 程序员
【C++知识点】指针
【C++知识点】指针
113 0
|
10月前
|
C语言
【C知识点】指针与数组的区别
【C知识点】指针与数组的区别
78 0
|
10月前
|
C++
【C/C++知识点】指针的算术运算
【C/C++知识点】指针的算术运算
54 0
|
10月前
|
C++
【C/C++知识点】const与指针
【C/C++知识点】const与指针
50 0