【C++基础】4. 变量

news2024/11/26 16:53:30

文章目录

  • 【 1. 变量的定义 】
  • 【 2. 变量的声明 】
    • 示例
  • 【 3. 左值和右值 】

  • 变量:相当于是程序可操作的数据存储区的名称。在 C++ 中,有多种变量类型可用于存储不同种类的数据。C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。
  • 变量的名称可以由字母、数字和下划线 字符组成。它 必须以字母或下划线开头 。大写字母和小写字母是不同的,因为 C++ 是 大小写敏感 的。
  • 变量的分类:整形、浮点型、字符型、布尔型、指针、数组、枚举型、共用体、结构体、类、引用、数据结构 等。
  • 变量类型和数据类型的区别:变量类型包含了数据类型,比如说数据类型是 int,那么变量类型也可能是 int,而变量类型是结构体,而数据类型中就没有包括枚举;可以说,数据类型是底层建筑,而变量类型是上层建筑;而且变量可以被操作。

【 1. 变量的定义 】

  • 变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。
    在这里插入图片描述
  • 变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示:
    在这里,type 必须是一个有效的 C++ 数据类型,可以是 char、wchar_t、int、float、double、bool 或任何用户自定义的对象,variable_list 可以由一个或多个标识符名称组成,多个标识符之间用逗号分隔。
type variable_list;
// 下面列出几个有效的声明:
int    i, j, k; //声明并定义了变量 i、j 和 k,这指示编译器创建类型为 int 的名为 i、j、k 的变量。
char   c, ch;
float  f, salary;
double d;
  • 变量可以在声明的时候被初始化(指定一个初始值)。初始化器由一个等号,后跟一个常量表达式组成,如下所示:
type variable_name = value;

下面列举几个实例:

extern int d = 3, f = 5;    // d 和 f 的声明 
int d = 3, f = 5;           // 定义并初始化 d 和 f
byte z = 22;                // 定义并初始化 z
char x = 'x';               // 变量 x 的值为 'x'
  • 不带初始化的定义:带有静态存储持续时间的变量会被隐式初始化为 NULL(所有字节的值都是 0),其他所有变量的初始值是未定义的。

【 2. 变量的声明 】

  • 变量声明 向编译器保证变量以给定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明。
  • 当使用多个文件且只在其中一个文件中定义变量时(定义变量的文件在程序连接时是可用的),变量声明就显得非常有用。您可以使用 extern 关键字在任何地方声明一个变量。虽然您可以在 C++ 程序中多次声明一个变量,但变量只能在某个文件、函数或代码块中被定义一次。
extern int a;     //声明一个全局变量a。
int a;            //定义一个全局变量a。

extern int a =0 ; //定义一个全局变量a,并给初值。
int a =0;         //定义一个全局变量a,并给初值。
  • 第3个 等于 第 4个,都是定义一个可以被外部使用的全局变量,并给初值,即 有赋值的就是定义
  • 定义只能出现1次,声明可以出现多次!:不管是 int a; 还是 extern int a=0; 还是 int a=0; 都只能出现一次,而 extern int a;可以出现很多次。
  • 当使用一个全局变量的时候,就要用到 声明的唯一代码:extern int a; 这时候extern不能省略,因为省略了,就变成 int a; 就变成了一个定义,而不是声明;另外赋值的话如 extern int a=5; 也就变成了定义。
  • 另一种方式:
    在头文件中包含下列代码:
    extern int temp=5;
    而在对应包含该头文件的源文件中则不需声明该变量。

示例

  • 普通变量
//.cpp文件
int Distance;
//.h文件
extern int Distance;
  • 结构体变量
//.cpp文件
lidar BenewakeLidar;
//.h文件
typedef struct 
{
 uint16_t Dist;
 uint16_t AMP;
 uint16_t tem;
 uint8_t RecieveFlag;
}lidar;

extern lidar BenewakeLidar;
  • 变量在头部就已经被声明,但是在主函数内被定义和初始化。
#include <iostream>
using namespace std;

// 变量声明
extern int a, b;
extern int c;
extern float f;

int main ()
{
  // 变量定义
  int a, b;
  int c;
  float f;

  // 实际初始化
  a = 10;
  b = 20;
  c = a + b;

  cout << c << endl ;

  f = 70.0/3.0;
  cout << f << endl ;

  return 0;
}
  • 函数的声明
// 函数声明
int func();

int main()
{
    // 函数调用
    int i = func();
}

// 函数定义
int func()
{
    return 0;
}

【 3. 左值和右值 】

C++ 中有两种类型的表达式:

  • 左值(lvalue):指向内存位置的表达式被称为左值(lvalue)表达式。左值可以出现在赋值号的左边或右边。
  • 右值(rvalue):指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。
  • 变量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。
// 下面是一个有效的语句:
int g = 20;
// 但是下面这个就不是一个有效的语句,会生成编译时错误:
10 = 20;

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

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

相关文章

Windows server 2012安装IIS的方法

Windows Server 2012是微软公司研发的服务器操作系统&#xff0c;于2012年9月4日发布。 Windows Server 2012可以用于搭建功能强大的网站、应用程序服务器与高度虚拟化的云应用环境&#xff0c;无论是大、中或小型的企业网络&#xff0c;都可以使用Windows Server 2012的管理功…

*** error 65: access violation at 0xFFFFFFF4 : no ‘write‘ permission怎么办

我发现是我的单片机型号设置错了&#xff0c;把debug里面的STM32F103ZET6修改为STM32F103ZE就可以正常运行了

信息检索度量指标(MAP@N, P@N)

我们今天遇到的大多数软件产品都集成了某种形式的搜索功能。我们在谷歌上搜索内容&#xff0c;在YouTube上搜索视频&#xff0c;在亚马逊上搜索产品&#xff0c;在Slack上搜索信息&#xff0c;在Gmail上搜索邮件&#xff0c;在Facebook上搜索人等等。 作为用户&#xff0c;工作…

基于SSM+Vue的网上花店系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

【问题总结】 记 一次dockerFile构建报错

写在前面&#xff0c; 其实是一个比较摸不着脑袋的bug&#xff0c;记录一下解决的过程&#xff0c;作为备忘录 问题留档 1、场景描述 在尝试使用dockefile构建一个tomcat镜像&#xff0c;内容如下&#xff0c;构建正常通过&#xff0c;但是容器启动失败 FROM centos:7 MAINT…

【办公类-18-02】(Python)教师获奖证书批量打印(教师信息、获奖类型,公章)

背景需求&#xff1a; 同事提出给word批量“添加电子公章&#xff08;png图片&#xff09;的需求 解压文件后&#xff0c;发现&#xff1a; 1、每份WORD文件名是一位老师的证书&#xff0c;需要打开每一份word&#xff0c;插入一个空白电子公章png。 2、每个word文件名包含教…

Redis缓存的高并发问题

Redis 做缓存虽减轻了 DBMS 的压力&#xff0c;减小了 RT&#xff0c;但在高并发情况下也是可能会出现各 种问题的。 1 缓存穿透 当用户访问的数据既不在缓存也不在数据库中时&#xff0c;就会导致每个用户查询都会“穿透” 缓存“直抵”数据库。这种情况就称为缓存穿透。一个…

SSL证书系列--又拍云Let’s Encrypt免费DV SSL证书使用教程

原文网址&#xff1a;SSL证书系列--又拍云Let’s Encrypt免费DV SSL证书使用教程_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何使用又拍云部署Let’s Encrypt免费DV SSL证书。 一、了解Let’s Encrypt 了解和关注SSL证书的朋友&#xff0c;似乎没有理由不知道 Let’s Encr…

java八股文面试[数据库]——数据库锁的种类

数据库锁的种类 MySQL数据库由于其自身架构的特点,存在多种数据存储引擎, MySQL中不同的存储引擎支持不同的锁机制。 MyISAM和MEMORY存储引擎采用的表级锁&#xff0c; InnoDB存储引擎既支持行级锁&#xff0c;也支持表级锁&#xff0c;默认情况下采用行级锁。 BDB采用的是页…

开店星小程序上架教程和后台Request failed with status code 500[undefined]问题处理

开店星小程序上架教程和后台Request failed with status code 500[undefined]问题处理 刚刚安装好开店星网站后台之后都会出现这个code 500[undefined]的错误&#xff0c;需要改一下代码。改好了之后就可以正常使用了。如果大家不懂得这样处理的可以私聊我&#xff0c;帮忙处理…

kettle通过java步骤获取汉字首拼

kettle通过java步骤获取汉字首拼 用途描述 一组数据&#xff0c;需要获取汉字首拼后&#xff0c;输出&#xff1b; 实现效果 添加jar包 pinyin4j-2.5.0.jar 自定义常量数据 Java代码 完整代码&#xff1a; import net.sourceforge.pinyin4j.PinyinHelper; import net.sou…

高潮迭起:探寻Twitch上精彩纷呈的电子竞技赛事直播

Twitch是电子竞技赛事的热门直播平台之一,它为全球范围内的电子竞技比赛提供了广泛的覆盖和直播服务。以下是一些在Twitch上直播的电子竞技比赛和赛事的例子: League of Legends (英雄联盟) Twitch广泛直播英雄联盟的各个赛事,包括全球性的锦标赛如英雄联盟全球总决赛(World …

SLAM从入门到精通(基本框架)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 SLAM是机器人的一个分支。广义上来说&#xff0c;机器人还包括了计算机视觉、语音识别、自然语言处理、机械臂控制、运动控制、机器人导航、机器人…

软件架构师 设计和编码

软件架构师 设计和编码 目录概述需求&#xff1a; 设计思路实现思路分析1.设在设计软件架构时&#xff0c;您需要考虑以下方面&#xff1a;2.在编码方面&#xff0c;您需要具有以下技能&#xff1a; 参考资料和推荐阅读 Survive by day and develop by night. talk for import …

如何绘制英语思维导图?偷偷告诉你这个绘制方法

如何绘制英语思维导图&#xff1f;绘制英语思维导图可以帮助我们更好地理清思路&#xff0c;提高学习和工作效率。同时&#xff0c;英语思维导图还可以帮助我们提高英语表达能力和阅读理解能力&#xff0c;让我们更好地掌握英语学习和应用。因此&#xff0c;绘制英语思维导图是…

msvcr120.dll放在哪里?怎么修复msvcr120.dll文件

当您在运行某些应用程序或游戏时遇到“msvcr120.dll缺失”错误时&#xff0c;这可能会影响您的使用体验。msvcr120.dll是Microsoft Visual C Redistributable的一部分&#xff0c;并且它提供了程序运行所需的运行时支持&#xff0c;今天我们来讨论一下msvcr120.dl文件缺失了要怎…

[SSM]MyBatisPlus高级

四、高级篇 4.1主键策略 主键的作用就是唯一标识&#xff0c;我们可以通过这个唯一标识来定位到这条数据。对于表数据中的主键&#xff0c;我们可以自己设计生成规则&#xff0c;生成主键。但是在更多的场景中&#xff0c;没有特殊要求的话&#xff0c;我们每次自己手动生成的…

第 2 章 线性表(线性表的动态分配顺序存储结构实现)

1. 背景说明 线性表(linear Iist)是最常用且最简单的一种数据结构。简言之&#xff0c;一个线性表是 n 个数据元素的有限序列。 至于每个数据元素的具体含义&#xff0c;在不同的情况下各不相同&#xff0c;它可以是一个数或一个符号&#xff0c;也可以是一页书&#xff0c;甚…

千粉福利——— ubuntu安装

&#xff08;一&#xff09;配置虚拟机&#xff0c;首先打开虚拟机 点击创建新的虚拟机或者左上角文件->新建虚拟机&#xff0c;或者使用快捷键CtrlN,选择自定义安装 选择虚拟机就硬件兼容性&#xff0c;默认点击下一步就好 安装客户机操作系统&#xff1a;选择稍后安装操作…

tensorflow QAT

tensorflow qat https://www.wpgdadatong.com/tw/blog/detail/70672 在边缘运算的重点技术之中&#xff0c;除了简化复杂的模块构架&#xff0c;来简化参数量以提高运算速度的这项模块轻量化网络构架技术之外。另一项技术就是各家神经网络框架&#xff08;TensorFlow、Pytorc…