16.指针的基本概念

16.指针-指针的基本概念


16.1 知识点

数据在内存中如何被存储

位(bit)是计算机中最小的内存单位,字节(byte)是计算机中最小的存储单位。
1 byte = 8 bit。

计算机内存中每个字节都有一个唯一的内存地址。无论是32位还是64位的计算机系统,内存地址都是按字节编号的。这意味着,计算机的内存地址是以字节为单位的。

什么是内存地址?

系统会按照字节对每个内存单元进行编号。所谓的内存单元,你可以理解为一个个带有门牌号的小房间。想要使用内存,就需要知道房间的门牌号码。

举个例子:
声明一个整型变量

int i = 2;

int 占4个字节,系统就会为该变量分配4个小房间,4个小房间的门牌号码为5001~5004。

接着我们再声明一个整型变量

int j = 10;

j 同样占4个字节,系统会在内存中接着为 j 分配小房间,5005~5008。

当我们要访问 ij 的具体存储信息时,首先要找到存储 ij 对应的房间门牌号码(内存单元)。

  • 读取 i 时,找到 i 的起始地址5001,因为整型占4个字节,因此系统会从5001开始读取4个字节出来作为 i 的值(5001~5004内存单元)。
  • 同样读取 j 时,j 的起始地址为5005,也占4个字节,系统会从5005开始读取4个字节作为 j 的值(5005~5008内存单元)。

内存单元的门牌号码,在程序语言中称之为内存地址(简称地址)。通过地址(门牌号码)我们就可以访问到指定的内存单元。所以可以形象的认为,地址是指向内存单元的。

指针是什么?

为了方便记忆,前辈们制定了一个规则,我们将指向变量地址的对象形象地称为该变量的“指针”。
既然指针是指向内存地址的,那么我们便可以通过指针找到对应的内存单元。

在程序中,指针是一个变量,其值为另一个变量的地址。我们可以通过指针间接地访问和修改该变量的值。

因为我们可以通过指针得到它指向的地址(内存地址),从而得到对应的内存单元,而内存单元中存储的就是变量的具体值。所以我们可以通过指针修改变量的值。

说人话:

指针变量就是存储其他变量地址的变量。我们不仅可以通过指针得到其他变量的地址,还可以根据该地址得到其他变量具体的值。


16.2 知识点代码

Lesson16_指针_指针的基本概念.cpp

#include <iostream>
using namespace std;
int main()
{
    std::cout << "指针的基本概念\n";

    #pragma region 知识点一 数据在内存中如何被存储

    //位(bit)是计算机中最小的内存单位
    //字节(byte)是计算机中最小的存储单位
    // 1byte = 8bit

    //计算机内存中 每个字节都有一个唯一的内存地址
    //无论是32位还是64位的计算机系统,内存地址都是按字节编号的
    //这意味着,计算机的内存地址是以字节为单位的

    //什么是内存地址?
    //系统会按照 字节 对每个 内存单元 进行编号
    //所谓的内存单元,你可以理解为一个个带有门牌号的小房间
    //想要使用内存,就需要知道房间的门牌号码
    //比如
    //声明一个整型变量 
    // int i = 2;
    // int 占4个字节,系统就会为该变量分配4个小房间
    // 4个小房间的门牌号码为 5001~5004
    // 
    //接着我们再声明一个整型变量
    // int j = 10;
    // j同样占4个字节,系统会在内存中接着为j分配小房间
    // 5005~5008

    //也就说当我们要访问i和j具体存储的信息时
    //首先要找到存储i和j对应的房间门牌号码(内存单元们)
    // 读取i时,找到i的起始地址5001,因为整型占4个字节
    // 因此系统会从5001开始读取4个字节出来作为i的值(5001~5004内存单元)
    // 
    // 同样读取j时,也是一样,j的起始地址为5005,也占4个字节
    // 系统会从5005开始读取4个字节作为j的值(5005~5008内存单元)

    //而内存单元的门牌号码,我们在程序语言中称之为内存地址(简称地址)
    //通过地址(门牌号码)我们就可以访问到指定的内存单元
    //所以可以形象的认为 地址 是 指向 内存单元的

    #pragma endregion

    #pragma region 知识点二 指针是什么?

    //为了方便记忆,前辈们制定了一个规则
    //我们将指向变量地址的对象 形象的称为该变量的 “指针”
    //既然 指针 是指向 内存地址 的,那么我们便可以通过指针找到对应的内存单元

    //而在程序中
    //指针是一个变量,其值为另一个变量的地址
    //我们可以通过指针间接的访问和修改该变量的值
    // 
    //因为我们可以通过指针得到它指向的地址(内存地址)
    //从而得到对应的内存单元,而内存单元中存储的就是变量的具体值
    //所以我们可以通过指针修改变量的值

    //说人话:
    //指针变量就是 存储其他变量地址 的变量
    //我们不仅可以通过指针得到其他变量的地址
    //还可以根据该地址得到其他变量具体的值

    #pragma endregion
}

16.3 练习题

计算机中最小的内存单位和最小的存储单位分别是什么?

最小内存单位是bit(比特),表示二进制中的一个0或1。

最小内存存储单位是byte(字节),1byte=8bit,计算机中以字节为基本单位来存储数据。

如何在内存中定位一个字节?

在内存中一个字节就是一个内存单元,而内存单元都会有一个唯一的内存地址。而内存地址是用于标识字节的位置的。

因此我们通过内存地址来定位一个字节。内存地址类似门牌号的存在!

用最简洁的语言告诉我C++中指针是什么?

指针是一种变量,用于存储另一个变量的内存地址(门牌号)。



转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏