首页 > 其他分享 >引用变量

引用变量

时间:2024-08-27 13:49:54浏览次数:9  
标签:10 存储 r7 变量 r3 栈顶 引用

在C++ Primer Plus中,最开始介绍的是变量和引用变量。变量实际就包含了左值类型的变量和右值类型的变量。

引用变量

引用是C++引入的概念,引用变量是已定义的变量的别名(alias)。引用的创建示例如下:

int a = 10;
int &b = a;

引用在定义时必须初始化,这点和const限定的变量很像,为什么需要初始化呢?通过compiler explorer分析其汇编:

第一句int a = 10对应2句汇编:

        movs    r3, #10     ;把立即数10存到寄存器r3
        str     r3, [r7]    ;将r3寄存器的值存到r7寄存器里面的那个内存地址,而r7在第4行被设置为sp + 0, 
                            ;sp即栈指针寄存器。也就是说此时r7存储的内存地址就是栈顶。总的看来就是在栈顶压入了一个变量,变量值为10。
                            ;这也是局部变量分配内存和存储的方式。

第二句int &b = a;对应:

        mov     r3, r7      ;将r7存储的内容(还是sp + 0,也即栈顶内存地址)存储到寄存器r3
        str     r3, [r7, #4];将r3内容(此刻的栈顶)存储到栈顶偏移4字节的地方,也就是栈上申请了4个字节空间存储局部变量a的地址。

第三句b = 5;对应:

        ldr     r3, [r7, #4];加载变量a的地址到r3中
        movs    r2, #5      ;r2存入立即数5
        str     r2, [r3]    ;r2里面的值存储到r3里面内存地址指向的地方,也就是变量a的存储空间。

标签:10,存储,r7,变量,r3,栈顶,引用
From: https://www.cnblogs.com/thammer/p/18382539

相关文章

  • 【Linux入门】shell基础篇——变量与运算
    文章目录shell中的变量概述变量的作用Shell变量名与变量值变量名变量值变量的作用范围局部变量(LocalVariables)全局变量(GlobalVariables)注意变量的类型1.环境变量(EnvironmentVariables)2.位置变量(PositionalVariables)3.预定义变量(PredefinedVariables)补充:自定......
  • nuxt3项目自定义环境变量,typescript全局提示
    最近使用nuxt3框架来写项目,其中有一点就是typescript语法提示让人闹心,使用vscode编辑器,如果有语法提示进行编码,工作效率可以提升一个档次。本篇文章说的就是如何在vscode中使用nuxt3框架,自定义环境变量,支持typescript语法提示。列出当前使用的环境版本node#21.4.0......
  • Nuxt3 全局变量接口前缀全局配置,全局方法,全局状态管理
    接口前缀全局配置,全局变量1.像api前缀这类的全局变量一般配置在nuxt.config.ts文件中。如下:nuxt.config.ts可以在public下定义全局变量,且public下的变量可以在客户端和服务端使用在其他任意vue或者js、ts文件中,可通过以下方式获取变量const{public:{apiBase}}=u......
  • 在 SQLAlchemy 中实现数据处理的时候,实现表自引用、多对多、联合查询,有序id等常见的一
    有时候,我们在使用SQLAlchemy操作某些表的时候,需要使用外键关系来实现一对多或者多对多的关系引用,以及对多表的联合查询,有序列的uuid值或者自增id值,字符串的分拆等常见处理操作。1、在SQLAlchemy中定义具有嵌套children关系的表要在SQLAlchemy中定义具有嵌套children关系......
  • Linux 进程 | 进程优先级&进程的环境变量
    文章目录进程概念4、进程优先级4.1基本概念4.2查看系统进程4.2.1ps-l4.2.2PRI&NI4.3用top命令更改已存在进程的nice:5、环境变量5.1常见环境变量5.2查看环境变量5.3测试PATH配置环境变量5.4代码中获取环境变量5.4代码中获取环境变量进程概念4、进程优先级4......
  • 引用类型和值类型(一)
    引用类型和值类型(一)关于引用类型和值类型的区别经常听到这样一个说法:“值类型分配在栈上,引用类型分配在堆上”。这个回答并不完全正确,或者说这不是值类型和应用类型真正的差别。官方文档给出的定义:引用类型的变量存储对其数据(对象)的引用,而值类型的变量直接包含其数据。可以理解......
  • ZBlog从环境变量中读取数据库配置
    c_option.php配置文件中参数的值为Zbp_GetEnv('环境变量名'),就会用Zbp_GetEnv函数读取环境变量的值(1.7.3开始支持)那么 ZC_MYSQL_SERVER, ZC_MYSQL_USERNAME, ZC_MYSQL_PASSWORD, ZC_MYSQL_NAME 这4个参数的值就会从 Zbp_GetEnv('DB_HOST') 等中获取//c_option.......
  • MySQL变量的使用
    在mysql文档中,mysql变量可分为两大类,即系统变量和用户变量。但根据实际应用又被细化为四种类型,即局部变量、用户变量、会话变量和全局变量。 一、局部变量mysql局部变量,只能用在begin/end语句块中,比如存储过程中的begin/end语句块。其作用域仅限于该语句块。--declare语......
  • 变量
    变量可以变化的量变量的三要素变量名变量类型作用域类变量:类内的变量需要在定义前加static从属于类实例变量:类中间在定义不加static从属于类的对象如果不初始化,就会默认初始化(boolean:false,除了基本类型,其它默认值都是null)局部变量:方法中的变量常......
  • 【Windows提权】windows环境变量滥用维权/提权
    原创掌控安全学院-camer#include<windows.h>#include<stdio.h>intmain(intargc,char*argv[]){//恶意程序wchar_t*Shell=L"C:\\Windows\\Temp\\shell.exe";HINSTANCEhInstance1=ShellExecuteW(NULL,L"open......