初始指针包括指针数组和二级指针(跑路人笔记)(2)

简介: 初始指针包括指针数组和二级指针(跑路人笔记)

2-2 野指针

1.不对指针进行初始化

如图


image.png

2.越界访问

如图


image.png


当p指针越界到数组之外是p就为野指针

3.

当指针访问的内存被销毁

如图


image.png



我们的p指针接收并保存了函数返回的a的地址但是在我们后续使用p时a的地址已经被摧毁了所以在后续使用时我们p指针的内容不在收到保护就会发生变化

从而我们的p就变成了野指针。


避免野指针


image.png


如果我们明确知道这个指针为野指针我们可以通过对其赋值为NULL(意为空指针),当我们知道他为空指针时我们就可以用if语句来避免野指针的使用


image.png


这样我们在使用指针的时候就可以不用提心吊胆的想有没有野指针了(只要程序中的野指针被赋值为NULL)。或者不想用之前用的指针的时候也可以将其赋值为NULL。


两个地址相减

前提条件:两个指针指向同一块空间。即两个元素之间的内存是连续的。


image.png


两个地址相减的绝对值是他们之间的元素个数

如图

image.png



他们地址相减的绝对值就是地址之间元素的个数。地址位于元素头部

——————————————————————————————————————————————————————

无关内容 (并不重要)


*(在标准中我们在使用指针时可以向后适当进行赋值和比较但不允许向前这样)

原话:

image.png



此内容并不重要

——————————————————————————————————————————————————————


指针和数组

因为数组内存存放的连续性所以指针和数组总是会有许多挂钩

下图我们可以看出 &arr[i] 和p+i和&p[i]等价都指向同一块内存


image.png


p[i] 和arr[i]也是等价的在被编译的时候都会先被编译成*(p+i)的形势所以两者也是等价的。


多级指针

(因本人也是菜鸡一枚所以多级指针咱只讲建立多级指针和多级指针是啥如何使用此篇文章没有讲述)

——————————————————————————————————————————————————————


先上图


image.png


(我们都以整型指针为例子进行讲述)

一级指针我们用int* pa 来创建二级则用int** ppa 来创建其他则类似。

当然一级指针存放的是变量地址二级指针则存放的是一级指针的内存地址

如果我们想解引用二级指针来找到我们变量的内容我们只需使用两次解引用操作符

如图


image.png


我们依旧通过二级指针对a进行了改变。

当然多级指针肯定有更大的用途我会在不就的将来更新出来。


指针数组

类似于整型数组之类的指针数组依旧是数组的一种形式

指针数组就是用来储存指针的数组。


image.png

当然我们可以看到指针数组并没有被完全定义后面的指针就为空指针及NULL指针不能被访问。

相关文章
|
1月前
使用指针访问数组元素
【10月更文挑战第30天】使用指针访问数组元素。
38 3
|
27天前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
1月前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
1月前
|
容器
在使用指针数组进行动态内存分配时,如何避免内存泄漏
在使用指针数组进行动态内存分配时,避免内存泄漏的关键在于确保每个分配的内存块都能被正确释放。具体做法包括:1. 分配后立即检查是否成功;2. 使用完成后及时释放内存;3. 避免重复释放同一内存地址;4. 尽量使用智能指针或容器类管理内存。
|
1月前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
1月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
56 4
|
1月前
使用指针访问数组元素
【10月更文挑战第31天】使用指针访问数组元素。
48 2
|
1月前
|
算法 索引
单链表题+数组题(快慢指针和左右指针)
单链表题+数组题(快慢指针和左右指针)
39 1
|
2月前
|
存储
如何使用指针数组来实现动态二维数组
指针数组可以用来实现动态二维数组。首先,定义一个指向指针的指针变量,并使用 `malloc` 为它分配内存,然后为每个子数组分配内存。通过这种方式,可以灵活地创建和管理不同大小的二维数组。
|
2月前
|
存储
如何通过指针数组来实现二维数组?
介绍了二维数组和指针数组的概念及其区别,详细讲解了如何使用指针数组模拟二维数组,包括定义与分配内存、访问和赋值元素、以及正确释放内存的步骤,适用于需要动态处理二维数据的场景。