首页 > 其他分享 >指针基础(day2)

指针基础(day2)

时间:2022-11-05 16:31:28浏览次数:53  
标签:int day2 房间 基础 地址 num 内存 指针

1.为什么会有指针?

我们在描述一座宾馆里的客人时,经常会用该客人入住的房间号来代指该客人,比如301室,302室等等。这样前台只需要在抽屉里保存客人入住的房间牌号,在寻找该客人时,只需要打开抽屉,拿出牌号,根据牌号的信息就能在宾馆里找到该客人。

同样的,对于计算机,所有的程序都要在内存中运行,而内存的容量显然是有限的。以32位系统的计算机为例,理论上,该系统最大支持存储2的32次方个bit位,也就是4gb内存。

为了有效地使用珍贵的内存资源,我们将计算机的内存按照如下方式划分:

指针基础(day2)_指针变量

我们将内存划分成单个的单元,为了能够访问每一个单元,我们需要对这些划分好的单元进行编号,正如对宾馆的房间进行编号一样。这些编号就是内存单元的地址。

实例

#include <stdio.h>

int main()

{

   int num = 10;

   &num;                             //取出num的地址

                                          //注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)

   printf("%p\n", &num);      //打印地址,%p是以地址的形式打印

   return 0;

}

结果

000000770D8FF744//十六进制 

(111 0111 0000 1101 1000 1111 1111 0111 0100 0100二进制)

以上主程序过程可以理解为:

1.向内存申请4个字节单元储存一个int型变量,我把该int变量取名为num,随后将10赋值给此变量,这样这个存储着值的名为num的变量就会储存于申请的内存字节单元内

(该存储单元/房间号由计算机分配,此时我只知道我申请的房间类型,也知道我给该房间取的名字及我在房间内存放的内容,但我并不知道宾馆给我申请存储的变量内容放到了何处)

2.取出num的地址

(我向前台提出指示,我想知道我申请的房间地址,此时服务员需要打开抽屉拿出房间的牌子)

3.我要求打印出num的地址

(我要求前台展示房间牌子/地址给我)

2.如何创建指针

现在我们已经清楚了为什么会有内存单元地址,我们将对进一步通过实例来学习指针。

实例

#include <stdio.h>

int main()

{

   int a = 10;                 //向内存申请4字符储存int变量 a

   int* b = &a;              //定义指针变量b,将存储变量a的地址储存在b

   printf("%p\n", &a);   //打印a的地址

   printf("%p\n", b);     //打印指针变量b的地址

   return 0;

}

结果

000000FE83B6F574

000000FE83B6F574


指针实际上就是存储变量位置的变量。当访问由a的地址确定的指针变量b的地址时,b将地址直接指向了a的地址。

此处可以理解为,我向宾馆申请了一个int房间,我把房间取名为a,并在该房间存储了内容物数值10,现在宾馆按照我的要求给我分配好了该房间的房间号,这时候我又申请了一个特殊的指针房间为b,随后将a的房间号牌存放到了b房间内,这样我只需要通过一定的指令访问指针房间b,就可以得到a的房间号牌,然后根据房间号牌找到a房间里的内容。

3.操作指针

实例

#include <stdio.h>

int main()

{

   int a = 10;

   int* b = &a;

   *b = 20;

   printf("%d\n", a);

   return 0;

}

结果

20

我们根据变量a的地址设置了指针b,可以通过*b对指针b进行反解,通过地址直接得到a的位置,随后将新的值存放到a房间内。*b的过程叫做解引用,即通过操作指针直接更改原地址存放变量的值。

以上为指针内容的初级理解。




标签:int,day2,房间,基础,地址,num,内存,指针
From: https://blog.51cto.com/u_15862591/5826021

相关文章

  • 【Python零基础入门篇 · 4】:字符串的运算符、下标和切片
    字符串名称中文名称作用举例str字符串字符串“hello”,”loveyou”,.......字符串的运算符:+*innotin字符串的运算符作用举例结果......
  • 2022-2023-1 20221421 《计算机基础与程序设计》第十周学习总结
    作业信息班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK10作业目标:cpu调度,进程控制,先到先......
  • 重温Python基础——字符串
    哈喽,兄弟们,本文带大家复习一下Python基础中的字符串,不知道大家还记得多少内容呢?字符串1、字符串就是一系列字符在python中,用引号括起的都是字符串,其中引号可以......
  • 学习笔记-Windows 基础服务搭建
    Windows基础服务搭建磁盘管理例1新建两个10G的硬盘,名称为A-10-1、A-10-2,挂载到主机;新建镜像卷,使用所有空间,驱动器号为D.1.开始——管理工具——计算机......
  • 基础JUC高并发编程-尚硅谷
    JUC高并发编程B站地址:【尚硅谷】大厂必备技术之JUC并发编程_哔哩哔哩_bilibili参考笔记1:(119条消息)【尚硅谷】大厂必备技术之JUC并发编程——笔记总结_浙桐的博客-CSD......
  • 2022-2023-1 20221401 《计算机基础与程序设计》第十周学习总结
    2022-2023-120221401《计算机基础与程序设计》第十周学习总结作业信息这个作业属于哪个课程<班级的链接>2022-2023-1-计算机基础与程序设计这个作业要求在哪......
  • 实验4 类与数组 指针
    实验五:vectorInt.hpp1#pragmaonce2#include<cassert>3usingnamespacestd;45classvectorInt{6public:7vectorInt(intn);8......
  • 我看谁还不懂多线程之间的通信+基础入门+实战教程+详细介绍+附源码
    一、多线程之间的通信(Java版本)1、多线程概念介绍多线程概念在我们的程序层面来说,多线程通常是在每个进程中执行的,相应的附和我们常说的线程与进程之间的关系。线程......
  • Python基础用法
      有人说:一个人从1岁活到80岁很平凡,但如果从80岁倒着活,那么一半以上的人都可能不凡。生活没有捷径,我们踩过的坑都成为了生活的经验,这些经验越早知道,你要走的弯路就会越少......
  • Object Pascal与Delphi中的指针
    ObjectPascal的指针1.https://blog.csdn.net/peixiaobin_blog/article/details/43191171ObjectPascal中,动态分配内存的函数是GetMem(),与之对应的释放函数为FreeMem()(......