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

简介: 【C】指针——知识点大全(详细,简洁,含例题)
+关注继续查看

一.指针的基本概念

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

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

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

指针之间存在运算

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

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

一级指针图示:

image

2.二级指针传参

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

二级指针图示:

image

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

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

说明:

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

image

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

image

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

image

三.字符指针

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

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

理解图示:

image

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

image

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

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

image

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

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

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

四.指针数组

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

1.应用:存储字符串组

image

2.应用:模拟二维数组

image

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

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

结论:

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

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

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

image



相关文章
|
1月前
|
C语言
初阶函数基础例题(1)
初阶函数基础例题(1)
|
2月前
|
算法 C语言
直接插入排序--C语言(附详细代码)(附图详解)
直接插入排序--C语言(附详细代码)(附图详解)
89 0
|
3月前
|
编译器 C语言
C语言——数组和指针 的基础知识(学习分享)(一)
C语言——数组和指针 的基础知识(学习分享)(一)
38 0
|
3月前
|
存储 C语言
C语言——数组和指针 的基础知识(学习分享)(二)
C语言——数组和指针 的基础知识(学习分享)(二)
35 0
|
3月前
|
C语言
【初阶C语言】有关的经典题型内含数组及递归函数题型讲解(入门适用)(二)
【初阶C语言】有关的经典题型内含数组及递归函数题型讲解(入门适用)(二)
|
3月前
|
C语言
【初阶C语言】有关的经典题型内含数组及递归函数题型讲解(入门适用)(一)
【初阶C语言】有关的经典题型内含数组及递归函数题型讲解(入门适用)(一)
【C】指针——知识点大全(详细,简洁,含例题)(二)
【C】指针——知识点大全(详细,简洁,含例题)
|
3月前
|
编译器 C语言
【C】数组——知识点大全(简洁,详细)(二)
【C】数组——知识点大全(简洁,详细)
|
3月前
|
存储 C语言
【C】数组——知识点大全(简洁,详细)(一)
【C】数组——知识点大全(简洁,详细)
【C】操作符——知识点大全(简洁,全面)(二)
【C】操作符——知识点大全(简洁,全面)