20.指针与常规变量的理解

news/2025/3/29 23:20:38/文章来源:https://www.cnblogs.com/littlecc/p/18795019
  • 一、基础概念:变量和内存

先我们需要明白,计算机中的每个变量都存储在内存的某个位置。
就像酒店里每个房间都有房间号一样,内存中的每个位置也有自己的"房间号" - 这就是内存地址。

  • 普通变量
int age = 25;
  • 在内存中分配一个"房间" - int类型(通常是4字节大小)
  • 房间号(地址)- 01xx 由系统自动决定
  • 房间内 - 地址 存储的是值25
  • 我们可以直接用age来访问这个值
个人理解:
常规变量int age = 25; 中变量名age 是指向内存地址(0x1000),
内存地址指向25(注意这里指向不是指针的意思),
实际就是变量名就是内存地址(0x1000),
只不过是编译器给内存地址起的"别名"(方便人类记忆的名字)

变量 int age = 25; 的内存关系:
编译后,age 会被替换为具体的内存地址
age是编译器给某个内存地址起的名字,那个地址存储着值25

  • 内存中的实际情况:
[内存地址]  [存储内容]  [变量名]
0x1000     25         age假设系统为 age 分配了地址 0x1000
当你写 age 时,编译器知道你要访问 0x1000 地址的值
当你写 &age 时,得到的就是 0x1000
  • 与指针的关键区别:
普通变量 age:直接关联到存储值的内存位置
指针变量 int *p = &age;:是一个专门存储地址的变量
表达方式 含义 示例值
age 直接获取存储的值 25
&age 获取变量所在的内存地址 0x1000
int *p = &age 指针p存储的是age的地址 p = 0x1000
*p 通过指针获取age的值 25


  • 对指针与常规变量的存储取值理解

假设有以下代码:

int age = 25;
int *p_age = &age;  //将age的地址赋值给p_age

内存布局可能是:

[变量]    [地址]    [存储内容]
age      0x1000    25
p_age    0x2000    0x1000 (age的地址)

当你在代码中写:

age → 直接从地址0x1000中读取值25
&age → 得到0x1000 ,&是取地址符
p_age → 读取0x2000的值0x1000
*p_age → 先读p_age的值0x1000,再去0x1000读值25 //* 是解引用

理解:指针(*p) -> 指向本身的内存地址(0x2000) -> 指向被赋值的给指针的内存地址(0x1000) -> 指向被赋值的给指针的内存地址中的值(25)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K3D|高效创建轻量级 k8s 集群 (run in dokcer)

k3d 是一个轻量级的包装器,用于在 docker 中运行 k3s(Rancher Lab 的最小 Kubernetes 发行版)什么是 K3S 官网:https://k3s.io/ 指南:https://rancher.com/docs/k3s/latest/en/ 中文版指南:https://docs.rancher.cn/docs/k3s/_index/ K3s 是一个轻量级的 Kubernetes 发行…

记录一下安装适用于intel 显卡的torch

支持的硬件和驱动如下按照表格安装好驱动。使用conda创建好虚拟环境(Python 3.9, 3.10, 3.11, 3.12, 3.13.)后,我的显卡是arc A580# For hardware listed in the table above, other than Intel Core™ Ultra Series 2 Mobile Processors (Arrow Lake-H), use the commands …

AP CSA FRQ Q2 Past Paper 五年真题汇总 2023-2019

Author(wechat): bigshuang2020 ap csa tutor, providing 1-on-1 tutoring. 国际教育计算机老师, 擅长答疑讲解,带学生实践学习。 热爱创作,作品:ap csa原创双语教案,真题梳理汇总, AP CSA FRQ专题冲刺, AP CSA MCQ小题狂练。2023 FRQ Q2 Sign This question involves met…

RabbitMQ的核心组成部分即分发模式

核心概念:Server:又称Broker ,接受客户端的连接,实现AMQP实体服务。 安装rabbitmq-serverConnection:连接,应用程序与Broker的网络连接 TCP/IP/ 三次握手和四次挥手Channel:网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道,客户端可以建立对各…

RabbitMQ的核心组成部分

核心概念:Server:又称Broker ,接受客户端的连接,实现AMQP实体服务。 安装rabbitmq-serverConnection:连接,应用程序与Broker的网络连接 TCP/IP/ 三次握手和四次挥手Channel:网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道,客户端可以建立对各…

Oracle11备份方案

备份方案(一) 1.1.备份脚本#!/bin/bash # Oracle 11g 业务库备份脚本# 配置部分 ORACLE_SID=orcl # 数据库实例名(按实际修改) BACKUP_DIR=/opt/oracle/backups # 备份存储目录 LOG_DIR=/opt/oracle/logs # 日志目录 KEEP_COPIES=7 # 保…

20242909 2024-2025-2 《网络攻防实践》实践四报告

20242909 2024-2025-2 《网络攻防实践》实践四报告 1.实践内容 在网络攻防环境中利用攻击机对靶机分别进行ARP欺骗攻击、ICMP重定向攻击、SYN FLOOD攻击和TCP RST攻击以及TCP会话劫持攻击等网络攻击方式。上述常见的网络攻击技术解析如下: 1.1 ARP欺骗攻击 ARP欺骗是通过伪造A…

20242203许振宇 2024-2025-2 《Python程序设计》实验二报告

20242203 2024-2025-2 《Python程序设计》实验二报告 课程:《Python程序设计》 班级: 2422 姓名: 许振宇 学号:20242203 实验教师:王志强 实验日期:2024年3月26日 必修/选修: 公选课 1.实验内容 1.设计并完成一个完整的应用程序,以完成加减乘除模等运算。 2.尝试设计一…

Grafana的基于角色的访问控制RBAC

创建全局用户设置用户权限创建团队团队添加成员Dashboard的权限管理 在任意一个Dashboard设置中

AccessibilityService微信自动化节点元素混淆问题解决

问题背景 AccessibilityService获取微信版本8.0.52以上的节点元素时信息会被混淆打乱,导致无法正常执行AccessibilityService自动化逻辑,这个问题直接影响自动化脚本对于后面微信版本的兼容。 解决 在自动化开源库Assists有网友提了这个关于微信的issues,最终也是他提供的解…

密文反馈模式CFB

密文反馈模式CFB密文反馈模式(CFB)是一种将分组密码变换为流密码的加密方式,支持逐比特或逐字节处理,它适用于需要加密任意长度数据的场合。 核心思想流密码化:利用分组密码算法生成密钥流(而非直接用来处理明文数据),与明文逐位/逐字节异或得到密文。反馈机制:每一轮的…

Grafana自定义Dashboard及其界面功能简介(图形表格制作)

新创建一个可视化组件 选择table表格类型 基础设置 Panel options 要添加多个指标记得要制定好每一个指标的别名,方便后续区分表格美化 TableTable footerCell optionsThresholds表格列名的更改及指定选择查看值 我们再添加一个指标,看看有哪些问题解决想要/不想要某个指标的…