【c/c++原始指针】浅显易懂理解指针

       身边很多c/c++的初学者都在指针部分的学习表示难以理解,实际上,当初博主在初学指针部分时也略感吃力。因此本篇文章尽可能通俗易懂的解释指针,帮助大家加深对于指针的理解。

1.理解指针存储内存地址的含义

       内存是在学习计算机中极为重要的一部分——当你编写了一套程序并试图执行它,所有的·程序都加载入内存,cpu访问内存中存储的程序从而执行你写的代码;当你试图定义一个变量,而需要从磁盘中加载数据时,所有都会被存储在内存中。(可以通过对汇编的学习加深了解)

       实际上,指针就是一个数字——一个存储内存地址的数字。

       我们不妨将内存理解为一条长长的街道,上面紧密排列着一排小房子,其中每个房子大小为一个字节。这些小房子里存储着计算机所需要的数据。而指针,可以理解成一张白纸,上面可以写上某间小房子的门牌号(即内存地址)——当我们使用这张纸,可以通过上面所写着的门牌号在街上轻易找到它所对应的小房子。这便是指针的意义。

       如上图所示,假设我们的指针值为01,则它指向了内存地址为01的内存空间。【当然,我要声明的是,实际的地址值要复杂的多,这里用简单的01、02、03表示仅仅为了方便初学者理解。】

      我们不妨实践一下:

#include <iostream>

int main(){
    int var = 8;
    void* ptr = &var;
    std::cin.get();
}

       我们定义了一个void类型指针,表示我们暂时不讨论指针的类型是什么样的,仅仅用于理解指针的作用。另外,我们可以发现我们定义了一个int变量var,赋值为8。既然我们定义了var变量,自然在内存中就会划分出一段区域来存储var变量,此时该段内存中的数据为8。那么我们怎么得到该区域的地址呢?我们能够通过在var变量前加上取地址符& 来获取var的地址(&var表示取var的内存地址)。这样,var的内存地址便被保存在了指针ptr中。

        我们能够发现,ptr拥有了一个值。这个便是var所在的内存空间的地址。

2.指针类型的作用及指针的初步使用

        我们现在已经通过指针获得了内存地址。那么怎么实现对目标内存空间的访问呢?只需要在指针名前加上*号便可表示指针所指向的内存地址。

        然而,在实际应用时发生了报错。这是因为我们所定义的void指针为无类型指针。实际上,var变量为int类型,而一个int类型会占用4个字节———所以实际上是以0x00a0fb64开始以及其后面的3个字节的内存空间,即一共4个字节的内存空间来存储var。

        我们要想通过内存空间访问var的值,必须告诉计算机我们要找的内存空间使用了4个字节存储数值。那么,我们通过将指针定义为int类型来实现这一点:

#include<iostream>

int main() {

	int var = 8;
	int* ptr = &var;
	*ptr = 10;
    std::cout<<var<<std::endl;
	std::cin.get();
}

       此时,我们则把var对应的内存空间存储的数据从8改为了10,那么当我们输出var变量的值时,则会输出10。

  • 24
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值