17-指针(初识)

news2025/1/10 3:26:54

17-1 内存

内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的。

为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。

假如有一个32位的电脑:

有32根地址线;

产生电信号:1/0;

32根地址:

00000000000000000000000000000000  --->0

00000000000000000000000000000001  --->1

……

1111111111111111111111111111111111111

一共有2^32个地址序列,这么多的地址,一个地址管理一个内存单元,一个内存单元有1个字节,所以可以管理2^32字节的空间

clac,打开电脑上的计算机:

 对2^32字节进行逐步换算:

综上:4,294,967,296 byte=4,194,304 kb=4,096 MB=4GB

计算机中的单位

bit-比特位-计算机中最小的单位

byte-字节  1byte=8bit

kb   1kb=1024byte

mb  1mb=1024kb

gb   1gb=1024mb

tb    1tb=1024gb

pb   1pb=1024tb

int main()
{
	int a = 10;  //向内存申请4个字节,存储10
	return 0;
}

那么,a占4个字节,有4个地址,那么a的地址到底是哪一个呢?

我们应该找第一个地址,即首地址

我们来看一下吧:

调试查看a的地址:

调试查看内存:

输入&a,列选择4,便于查看

一行4个字节 

左:地址

中:存放在内存里的数据

右:内存数据被解析得到的一些结果

十进制:0 1 2 3 4 5 6 7 8 9

八进制:0 1 2 3 4 5 6 7 8

十六进制:0 1 2 3 4 5 6 7 8 9 a b c d e f

a占32个bit位:

10的二进制:0000 0000 0000 0000 0000 0000 0000 1010

10的十六进制:0    0       0       0       0       0       0        a

即:0x 00 00 00 0a

在内存中是倒着存的(后续会讲原理)

综上,0x00000080668FF954地址存的就是10

17-2 指针变量和解引用

%p:以地址的格式打印的数据

我们来打印一下a的地址

int main()
{
	int a = 10;  //向内存申请4个字节,存储10
	printf("%p\n", &a);
	return 0;
}

结果如下: (a的地址每次都会变)

最终结果呈现的是十六进制,因为十六进制易于展示

存储a的地址:

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

这里的p,就是指针变量

注意:

变量是p,不是*p;

类型是int*;

*,说明p是指针变量;

int说明p指向的对象是int类型。

内存单元->编号->地址->地址也被称为指针

存放指针(地址)的变量就是指针变量

图解:

int main()
{
	int a = 10;
	int* p = &a;
	*p=20;  //解引用操作符,意思就是通过p中存放的地址,找到p所指向的对象,*p就是p指向的对象
	printf("%d\n", a);  //其实*p就是a
	return 0;
}

a的值被改变:

 进一步解释:

&a  //取地址a,找到a的地址
*p  //解引用指针变量,找到指针变量指向的对象a

看一下内存里:

再次表明取的是首地址

17-3 指针的大小

不管是什么类型的指针,都是在创建指针变量

指针变量是用来存放地址的

指针变量的大小取决于一个地址存放的时候需要多大空间

32位机器上的地址:32bit位 - 4byte,所以指针变量的大小是4个字节(X86平台)

64位机器上的地址:64bit位 - 8byte,所以指针变量的大小是8个字节(X64平台)

X64平台:

测试代码:

int main()
{
	printf("%zu\n", sizeof(char*));
	printf("%zu\n", sizeof(short*));
	printf("%zu\n", sizeof(int*));
	printf("%zu\n", sizeof(float*));
	printf("%zu\n", sizeof(double*));
	return 0;
}

运行结果: 

 X86平台:

测试代码:

int main()
{
	printf("%zu\n", sizeof(char*));
	printf("%zu\n", sizeof(short*));
	printf("%zu\n", sizeof(int*));
	printf("%zu\n", sizeof(float*));
	printf("%zu\n", sizeof(double*));
	return 0;
}

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1520426.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GraspNet-baseline复现----Linux-Ubuntu

1.基本环境 Ubuntu 20.04Cuda 11.0 、cuDNN 80.0Python 3.7.16PyTorch 1.7.0 2.环境配置 PyTorch的版本对Cuda和Python的版本都有依赖,所以基本步骤是 确定需要安装的PyTorch版本 —> 通过 网站 确定对应的cuda版本和python版本 —> 创建虚拟环境配置环境。…

16.WEB渗透测试--Kali Linux(四)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:15.WEB渗透测试--Kali Linux(三)-CSDN博客 1.crunch简介与使用 C…

【回归预测】基于SSA-RF(麻雀搜索算法优化随机森林)的回归预测 多输入单输出【Matlab代码#66】

文章目录 【可更换其他算法,获取资源请见文章第6节:资源获取】1. 随机森林RF算法2. 麻雀搜索算法3. 实验模型4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法,获取资源请见文章第6节:资源获取】 1. 随机森林RF算法 …

二进一出模拟量隔离变送器

二进一出模拟量隔离变送器定义: 是两路模拟量信号同时输入,隔离变送器选择其中的一路高信号输入的或者低信号输入的通道进行信号传输及控制,该隔离变送器可以用控制信号来选择A路,B路的输入信号,还可以通过干接点&…

开源堡垒机Jumpserver安装教程

前言:堡垒机的应用场景 公司内有若干台服务器,既有windows的也有linux的, 提供有ERP,OA,Web,报表等等各种服务,往往需要远程登录到服务器上去做运维,但如果给root或者administrator权限,很容易出现不知道谁操作了的问题.如果不同人设置不同账号,又账号过多,权限不足等等其他问题…

5 个适用于 Windows 10 和 11 的最佳 PDF 转 Word 转换器

PDF 文件是共享文档的首选格式,但是此类文件存在一些限制,导致难以修改或编辑。因此,您可能会发现自己正在寻找一种将 PDF 文件转换为 Word 或其他可编辑格式的方法。 有许多不同的 PDF 转换器,每种转换器提供的功能略有不同。本…

移远通信亮相AWE 2024,以科技力量推动智能家居产业加速发展

科技的飞速发展,为我们的生活带来了诸多便利,从传统的家电产品到智能化的家居设备,我们的居家生活正朝着更智能、更便捷的方向变革。 3月14日,中国家电及消费电子博览会(Appliance&electronics World Expo&#xf…

恒创科技:什么是BGP线路服务器?BGP机房的优点是什么?

在当今的互联网架构中,BGP(边界网关协议)线路服务器和BGP机房扮演着至关重要的角色。BGP作为一种用于在自治系统(AS)之间交换路由信息的路径向量协议,它确保了互联网上的数据能够高效、准确地从一个地方传输到另一个地方。那么,究竟什么是BGP…

【Web】记录CISCN2023国赛初赛DeserBug题目复现

目录 前言 分析 step0 step1 step2 EXP 总结 前言 Hessian的链子审得有点疲劳,不如做做题吧,挑了国赛入手,整体做下来感觉十分丝滑&水到渠成,自然&通透。 仅仅是记录一下菜鸡做题的感受,不会往深入了…

闪电网络协议设计思想剖析

1. 引言 闪电网络可能是比特币之上部署的最受期待的技术创新。闪电网络,为由 Joseph Poon 和 Tadge Dryja 于2015年首次提出的支付层,承诺支持: 用户之间几乎无限数量的链下交易,几乎免费,同时利用比特币提供的安全性…

【CKA模拟题】查询消耗CPU最多的Pod

题干 For this question, please set this context (In exam, diff cluster name) 对于此问题,请设置此上下文(在考试中,diff 集群名称) kubectl config use-context kubernetes-adminkubernetesFind the pod that consumes the …

Centos7安装ffmpeg

Centos7安装ffmpeg 用到的包压缩并安装 用到的包 压缩并安装 tar xvJf ffmpeg-5.0.1.tar.xz yum install -y gcctar -zxvf yasm-1.3.0.tar.gz cd yasm-1.3.0 ./configure make && make install yasm --versionyum install -y bzip2tar jxvf nasm-2.14.02.tar.bz2 cd n…

体验OceanBase OBD V2.5.0 组件内扩容和组件变更

背景 OBD 是OceanBase的命令行部署工具,在 obd V2.5.0 版本之前,其主要功能主要是部署各类组件,例如 oceanbase-ce,obproxy-ce,obagent 等。然而,它并不支持组件的变更操作以及组件内部的扩缩容调整。具体来说: 1、若…

java操作HBase

创建一个学生信息表,用来存储学生的姓名(姓名作为行键,且假设姓名不会重复)以及考试成绩,其中考试成绩(score)是一个列族,存储了各个科目的考试成绩。然后向student中添加数据 1、HB…

MySQL-索引事务

文章目录 前言一、 索引1.1 概念1.2 作用1.3 使用场景1.4 使用1.5 索引的底层数据结构1.5.1 用来查询的数据结构1.5.2 B树1.5.3 B树 二、事务2.1 为什么使用事务2.2 事务的概念2.3 事务的性质(ACID)2.4 事务的使用 前言 在这里将最近学习的MySQL中索引及…

ideaSSM物流运输管理系统短路径算法开发mysql数据库web结构Dijstra编程计算机网页源码maven项目

一、源码特点 idea ssm 物流运输管理系统是一套完善的完整信息管理系统,结合SSM框架完成本系统SpringMVC spring mybatis ,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数…

【Unity】程序创建Mesh(二)MeshRenderer、光照、Probes探针、UV信息、法线信息

文章目录 接上文MeshRenderer(网格渲染器)Materials(材质)Material和Mesh对应Lighting光照Lightmapping材质中的光照 光源类型阴影全局光照Probes(探针)Ray Tracing(光线追踪)Additi…

家具工厂5G智能制造数字孪生可视化平台,推进家具行业数字化转型

家具制造5G智能制造工厂数字孪生可视化平台,推进家具行业数字化转型。随着科技的飞速发展,家具制造业正迎来一场前所未有的数字化转型。在这场家具制造业转型中,5G智能制造工厂数字孪生可视化平台发挥着至关重要的作用。 5G智能制造工厂数字孪…

基于Java+SpringMVC+vue+element宠物管理系统设计实现

基于JavaSpringMVCvueelement宠物管理系统设计实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源…

橡胶工厂5G智能制造数字孪生可视化平台,推进橡胶工业数字化转型

橡胶5G智能制造工厂数字孪生可视化平台,推进橡胶工业数字化转型。随着信息技术的迅猛发展和智能制造的不断推进,数字化转型已成为制造业转型升级的重要方向。橡胶工业作为传统制造业的重要领域,正面临着产业升级和转型的迫切需求。橡胶5G智能…