指针专题---------初探指针(一)

一、什么是指针

说起指针,大家可能或多或少知道一些,比如我们定义一个整型变量,再把这个整型变量的地址赋给一个指针,我们就能通过指针来获取到整型变量的值。

上面这就是我最一开始接触指针的时候,来理解指针的方式。

新的理解:

我们可以找到一块内存空间(可以是直接已经在内存空间中申请过的或者是新申请内存空间),再通过把这块内存空间的地址赋给指针,这样就可以通过指针来维护这块内存空间的值。

二、什么是内存

通俗的来说,电脑运行就是CPU计算,内存来存与计算有关的数据。我们的内存就在主机上的内存条上放着。内存条是物理属性,我们不用考虑,只需要知道,内存条给我们提供了一块内存,用来保存数据用。

既然内存可以保存数据,那内存肯定要有空间大小(就像房子一样,房子可以住人,房子就有大小)。也需要有地址(就像房子,你住在那个屋里面,这个屋子肯定要有一个标号来区别别的屋子),这样才能知道哪些数据存放在那一块内存中,这就是地址的作用,用来区分数据到底存放在内存中的哪个位置。因此总的内存空间根据地址就被分为了一个个的小内存,每一个小内存都有自己的地址(用来区分和其他小内存),每一个小内存里面都可以存放数据。

当然内存虽然被分为了一个个的小内存,但是某些小内存就会构成一个个的区域(用来集中存放一类的数据)。

    整个内存大方向分为四个区:

  1. 代码区
  2. 全局区
  3. 栈    区
  4. 堆    区

关于这四个区域,如果不太懂, 点击这里!!!

在上面的链接中详细讲述了这四个区域

总结:

总的内存空间就像我们国家一样,在国家里,又分一家又一家的人(这里的家可以类比成小内存),而且我们国家又可以分为23个省(这里的省可以类比成每一个区)。

三、再看整数的定义

#include<iostream>
using namespace std;

int main()
{
	int a;

	cout << a << endl;
	return 0;
}

上面是 最基础的整型变量的定义,

按照我一开始的理解是:

我定义了一个变量a,而且把他赋初值为10.随后我就可以用这个变量a 来进行运算或者输出。

新的理解:

因为是在函数体内部定义的变量,所以会在栈区申请一块空间(4个字节),这4个字节是连续的存储的,并且这一块给一块空间进行赋予了一个名字 a,通过操控a ,可以对这块内存空间的进行操控(这里的a可以比作每个人的名字,a的地址可以比作每个人的身份证号)。

现在的计算机都是字节编址的,意思就是一个字节就是一个内存单元,定义一个整型变量占四个字节,这四个字节都有自己的地址,

但是如果对变量a进行取址操作,那么返回的值肯定是一个地址,那到底是这四个个字节的哪个地址呢?

正确答案:

如果对a进行取址操作,返回的地址就是这四个连续空间的首地址(这个是规定,没有为啥)。下面看图

四、初探指针

首先来看代码:

#include<iostream>
using namespace std;

int main()
{
	int a=10;
	int* p = &a;
	cout << *p << endl;
	return 0;
}

一般理解:

首先定义了一个整型变量a,又定义了一个整型的指针,这个指针的指向就是变量a的地址,通过指针就可以获得变量a的值。

新的理解:

因为是在main函数内部,所以定义一个整数变量a,就是相当于在栈区申请4个自己的内存空间,给这4个内存空间赋予了一个新的名字a,又定义了一个整型指针,相当于又在栈区申请了一块空间(32位的系统是4个字节,64位的是8个字节),这块空间用来存放整型指针p,然后又给这个指针p进行了赋值,这样一来指针p就指向一个内存空间(注意区分这个指向的内存空间和存放指针自身的内存空间)。通过操控指针p,就可以间接的对指向的内存空间进行操控。

所以我认为指针最重要的一个作用就是:通过指针去操控一块内存空间

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值