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

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

前言


大家好啊!又是我这个快乐跑路人,扫雷的展开没有多少东西我就把之前的扫雷更新了一下把展开放到哪里了,今天我们来弄一下指针(指针作为c语言中最重要的一部分自然不能一下子弄完,所以我分为初始指针和详解指针。)


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

(快乐分割线(^ ▽ ^))


内存略述

讲指针之前还是要先略讲一下内存.

首先为了方便查找我们把内存分为一个个的内存单元.

内存地址又被编上一个个号(一般以十六进制呈现).

内存编号就被称为地址一个地址占一个字节.

内存单元的编号由地址线(物理的电线)的通电产生.


一、啥是指针?

1.指针是内存单元中最小的编号,也就是地址。

2.平时口语说的指针一般是指针变量是用来存放地址的变量。


我们通过一个十分简单的代码来观察一下内存的原理:


内存

int main(void)
{
  int a = 0;
  int* p = &a;
  return 0;
}

image.png


最上面的地址是a的地址我们可以通过&a来得到作为int 类型的a变量他的地址却知识所占四个内存单元的开头的一个所以我们就称每个变量开头的内存单元为地址

p得到的也只是开头的内存单位

p作为指针在32位计算机的大小为4字节

在64位计算机中8个字节的大小

因为

32位机器上每个地址是32个0或1也就是32个比特位一个字节是8个比特位所以我们要储存32个比特位就需要4个字节大小

同理

64位机器就需要8个字节大小的指针来存放地址。


二、指针和指针类型(指针类型的重要性)

2-1指针加减整数

此例子只是为了证明不同类型的指针有着不同的意义。

在32位机器下所有的指针都有这相同的4个字节大小(64位机器则有8个字节大小)

但是他们所控制的字节大小不同

如图:



image.png


我们用char类型的指针来控制int类型的变量就没有按照我们心里所想的那样来执行本应该打印2的最后却打印了怪怪的数字而我们用相同类型的指针来控制就没发生上述怪事。我们来用内存来解释此事。

上图:


image.png


开始时我们将a设成了44332211



image.png


经历了char类型指针的操作我们发现我内存里的a内容就只有一个字节的内容发生了改变可是我们int变量有四个字节的空间啊,所以就发生产生了那个奇奇怪怪?的数字。而我们使用int类型的指针进行操作又会发生什么呢?

上图!!!


image.png


诶!这一下我们四个字节的内容都发生了改变,这样我们的int a就可以被安排明白了


image.png


而在不同类型指针加整数的时候地址的变化也是不同的

所以指针类型相对应十分的重要。


从上面的例子可以看出指针类型对应的必要性。

小结: 指针类型决定了在解引用的时候能一次访问几个字节的能力


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