【C++入门】变量和基本类型

目录

一、 基本内置类型

1.1. 整型(Integer Types)

1.2. 浮点型(Floating-point Types)

1.3. 字符型(Character Type)

1.4. 布尔型(Boolean Type)

1.5. 示例代码

二、变量声明与定义

2.1. 声明 vs 定义

2.2. 变量的初始化

2.3. 默认初始化规则

三、作用域与生命周期

3.1. 作用域类型

3.2. 生命周期对比

四、复合类型

4.1. 引用(别名)

4.2. 指针

五、const限定符

5.1. 基本用法

5.2. 顶层const vs 底层const

六、类型别名

6.1. 传统方式

6.2. C++11新方式

七、auto类型推导(C++11)

八、关键注意事项


在C++编程中,变量和基本类型是编程的基础。了解如何声明和使用变量,以及掌握C++中的基本数据类型,是编写有效C++程序的第一步。

一、 基本内置类型

C++提供了多种基本数据类型,用于存储不同类型的数据。

1.1. 整型(Integer Types)

  • int:标准整型,通常占用4个字节(32位系统)。
  • short:短整型,通常占用2个字节。
  • long:长整型,通常占用4或8个字节(取决于系统)。
  • long long:更长的整型,通常占用8个字节。

整型变量可以存储正数、负数和零。

1.2. 浮点型(Floating-point Types)

  • float:单精度浮点型,通常占用4个字节。
  • double:双精度浮点型,通常占用8个字节。
  • long double:扩展精度浮点型,占用字节数依赖于实现(通常是12或16个字节)。

浮点型变量可以存储小数和科学计数法表示的数。

1.3. 字符型(Character Type)

  • char:字符型,通常占用1个字节。
  • wchar_t宽字符,通常2字节,处理Unicode字符。

字符型变量可以存储单个字符,包括字母、数字和特殊字符。字符常量用单引号括起来,如'A'

1.4. 布尔型(Boolean Type)

  • bool:布尔型,用于存储逻辑值truefalse

布尔型变量通常用于条件判断和控制结构。

1.5. 示例代码

以下是一个简单的C++程序,展示如何声明和使用变量和基本类型:

#include <iostream>int main() {int age = 25;double salary = 5000.0;char letter = 'A';bool isPassed = true;std::cout << "Age: " << age << std::endl;std::cout << "Salary: " << salary << std::endl;std::cout << "Letter: " << letter << std::endl;std::cout << "Is Passed: " << std::boolalpha << isPassed << std::endl;return 0;
}

声明了四个变量,分别属于整型、浮点型、字符型和布尔型,并使用std::cout输出它们的值。 

二、变量声明与定义

2.1. 声明 vs 定义

在C++中,变量必须先声明后使用。声明变量的基本语法是:

dataType variableName;
  • dataType:变量的数据类型,决定了变量可以存储的数据的类型和范围。
  • variableName:变量的名称,用于在程序中引用变量。

 例如:

int age;
double salary;
char letter;
bool isPassed;

这里,age是一个整型变量,salary是一个双精度浮点型变量,letter是一个字符型变量,isPassed是一个布尔型变量。

2.2. 变量的初始化

变量可以在声明时进行初始化,也可以在声明后进行赋值。 

int age = 25;
double salary = 5000.0;
char letter = 'A';
bool isPassed = true;// 或者声明后赋值
age = 30;
salary = 6000.0;
letter = 'B';
isPassed = false;

2.3. 默认初始化规则

变量类型默认值
全局变量零初始化
局部内置类型未定义(随机值)
类类型调用默认构造函数

三、作用域与生命周期

3.1. 作用域类型

int global = 100;  // 全局作用域int main() {int local = 50; // 块作用域{int inner = 30; // 嵌套块作用域}
}

3.2. 生命周期对比

变量类型生命周期存储位置
局部变量块执行期间栈内存
全局变量程序运行全程数据段
static局部变量首次定义到程序结束数据段

四、复合类型

4.1. 引用(别名)

int val = 42;
int &refVal = val;  // 必须初始化
refVal = 100;       // 修改原变量值

引用特性

  • 必须绑定到对象(不能绑定字面量)

  • 类型严格匹配(double &d = i;非法)

  • 无法重新绑定

4.2. 指针

int *p = nullptr;  // 现代C++推荐初始化方式
int num = 10;
p = &num;          // 取地址
*p = 20;           // 解引用// 指针运算
int arr[5] = {0};
int *ptr = arr;
ptr++;  // 移动sizeof(int)字节

指针操作规范

  • 访问前必须检查非空:if(p != nullptr) { ... }

  • 优先使用智能指针(unique_ptr/shared_ptr

  • 避免野指针:int *p; *p = 5;(危险!) 

五、const限定符

5.1. 基本用法

const int MAX_SIZE = 100;  // 必须初始化
const int *p = &MAX_SIZE; // 指向常量的指针
int *const cp = &var;      // 常量指针
constexpr int N = 20;      // 编译期常量(C++11)

5.2. 顶层const vs 底层const

int i = 0;
const int ci = 42;  // 顶层const
const int *p2 = &ci; // 底层const
const int *const p3 = p2; // 右const是顶层,左const是底层

六、类型别名

6.1. 传统方式

typedef double wages;  // wages是double的别名
typedef wages base, *p; // base是double, p是double*

6.2. C++11新方式

using SI = Sales_item;  // 更直观的语法
using Ptr = int*;       // 指针类型别名

七、auto类型推导(C++11)

auto i = 42;        // int
auto d = 3.14;      // double
auto p = &i;        // int*
auto &r = d;        // double&// 复合类型推导
const auto *cp = &i; // const int*
auto ptr = new auto(10); // int*

auto使用规范

  • 避免滥用:auto x = GetComplexObject(); 可能隐藏类型信息

  • 必须初始化:auto y;(错误!)

  • 结合decltype使用:decltype(f()) sum = x;

八、关键注意事项

  • 变量命名冲突:避免与标准库名称冲突(如countlist

  • 类型转换陷阱

unsigned u = 10;
int i = -42;
cout << i + i << endl;  // -84
cout << u + i << endl;  // 4294967264(32位系统)
  • 字面值后缀
auto x = 3.14f;   // float
auto y = 100ULL;  // unsigned long long
  • 类型转换操作
int a = 5;
double b = static_cast<double>(a);  // C++风格转换

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

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

相关文章

JVM内存结构笔记03-方法区

文章目录 方法区1.定义2.组成方法区与永久代和元空间的关系为什么要将永久代 (PermGen) 替换为元空间 (MetaSpace) 呢? 3.方法区常用参数4.运行时常量池常量池运行时常量池定义查看class文件 方法区 1.定义 方法区属于是 JVM 运行时数据区域的一块逻辑区域&#xff0c;是各个…

数据库语句

环境变量path下的目录是系统目录。 #include <iostream> #include <mysql.h> #pragma comment(lib,"libmysql.lib")//链接libmysql.dll动态库的中间桥 // MYSQL* conn;//数据库句柄。后面还有网络句柄&#xff08;用来网络收发数据&#xff09; bool co…

Word 小黑第15套

对应大猫16 修改样式集 导航 -查找 第一章标题不显示 再选中文字 点击标题一 修改标题格式 格式 -段落 -换行和分页 勾选与下段同页 添加脚注 &#xff08;脚注默认位于底部 &#xff09;在脚注插入文档属性&#xff1a; -插入 -文档部件 -域 类别选择文档信息&#xff0c;域…

【从零开始学习计算机科学】编译原理(七)运行时刻环境

【从零开始学习计算机科学】编译原理(七)运行时刻环境 运行时刻环境存储组织空间的栈式分配活动树活动记录和控制栈简单栈式存贮分配C语言的过程调用和过程返回时的存贮管理堆式存储分配堆式存储分配的功能垃圾回收基于跟踪的垃圾回收短停顿垃圾回收运行时刻环境 存储组织 …

一维下料之 *贪心算法* —— CAD c#二次开发

一维下料之贪心算法&#xff0c;需求如下 已知条件 我们有一批长度为 380 米 的原材料&#xff08;例如钢管、木材等&#xff09;。 切割需求 需要从这些原材料中切割出以下长度的小段&#xff1a;42 米&#xff1a;需要 13 段 140米&#xff1a;需要 23 段 130 米&#xff1a…

刷leetcode hot100--动态规划3.12

第一题乘积max子数组[1h] emmmm感觉看不懂题解 线性dp【计划学一下acwing&#xff0c;挨个做一下】 线性动态规划 相似题解析 最长上升子序列 最大上升子序列和 最大连续子段和 乘积最大子数组_哔哩哔哩_bilibili 比较奇怪的就是有正负数和0&#xff0c;如何处理&#xff1f…

Linux安装升级docker

Linux 安装升级docker Linux 安装升级docker背景升级停止docker服务备份原docker数据目录移除旧版本docker安装docker ce恢复数据目录启动docker参考 安装找到docker官网找到docker文档删除旧版本docker配置docker yum源参考官网继续安装docker设置开机自启配置加速测试 Linux …

pycharm + anaconda + yolo11(ultralytics) 的视频流实时检测,保存推流简单实现

目录 背景pycharm安装配置代码实现创建本地视频配置 和 推流配置视频帧的处理和检测框绘制主要流程遇到的一些问题 背景 首先这个基于完整安装配置了anaconda和yolo11的环境&#xff0c;如果需要配置开始的话&#xff0c;先看下专栏里另一个文章。 这次的目的是实现拉取视频流…

LLM:了解大语言模型

大型语言模型&#xff08;Large language models&#xff0c;LLMs&#xff09;&#xff0c;如 OpenAI 的 ChatGPT &#xff0c;或者 DeepSeek 等&#xff0c;是过去几年中开发出来的深度神经网络模型。它们为自然语言处理&#xff08;natural language processing&#xff0c;N…

Linux多进程学习

一、什么是多进程 1.多任务程序能够同时做多件事情&#xff0c;如QQ同时聊天和上传下载。 2.多任务程序在应用开发中非常普遍&#xff0c;是必须掌握的基本概念。 二、进程的创建与资源分配 1.操作系统在创建进程时会分配内存资源、CPU资源和时间片。 2.进程的内容包括代码、…

「Unity3D」UGUI将元素固定在,距离屏幕边缘的某个比例,以及保持元素自身比例

在不同分辨率的屏幕下&#xff0c;UI元素按照自身像素大小&#xff0c;会发生位置与比例的变化&#xff0c;本文仅利用锚点&#xff08;Anchors&#xff09;使用&#xff0c;来实现UI元素&#xff0c;固定在某个比例距离的屏幕边缘。 首先&#xff0c;将元素的锚点设置为中心&…

STM32 内置的通讯协议

数据是以帧为单位发的 USART和UART的区别就是有没有同步功能 同步是两端设备有时钟连接&#xff0c;异步是没时钟连接&#xff0c;靠约定号的频率&#xff08;波特率&#xff09;接收发送数据 RTS和CTS是用来给外界发送已“可接收”或“可发送”信号的&#xff0c;一般用不到…

C语言实现队列数据结构:思路与代码详解

目录 一、引言 二、整体思路 三、代码模块分析 &#xff08;一&#xff09;头文件包含与宏定义 &#xff08;二&#xff09;数据类型定义 &#xff08;三&#xff09;队列操作函数 1. 队列初始化 2. 队列销毁 3. 入队操作 4. 出队操作 5. 获取队头元素 6…

商业智能BI的未来,如何看待AI+BI这种模式?

昨天在和一位朋友线上聊天的时候&#xff0c;提了一个问题&#xff0c;你是如何看待AI&#xff08;人工智能&#xff09;BI&#xff08;商业智能&#xff09;这种模式和方向的&#xff0c;我大概来说一下我个人的看法。 以我在商业智能BI项目中接触到的行业和企业&#xff0c;…

如何制作Windows系统盘、启动盘?(MediaCreationTool_22H2)

文章目录 每日一句正能量前言一、准备工作二、制作启动盘后记 每日一句正能量 每个在你生命里出现的人&#xff0c;都有原因。喜欢你的人给你温暖关心。你喜欢的人让你学会爱和付出&#xff0c;不喜欢你的人让你自省成长。你不喜欢的人教会你宽容尊重&#xff0c;没有人是偶然出…

DataWhale 大语言模型 - 语言模型发展历程

大语言模型 LLMBook 项目背景 本课程围绕中国人民大学高瓴人工智能学院赵鑫教授团队出品的《大语言模型》书籍展开&#xff0c;覆盖大语言模型训练与使用的全流程&#xff0c;从预训练到微调与对齐&#xff0c;从使用技术到评测应用&#xff0c;帮助学员全面掌握大语言模型的…

C#带有设备仿真功能串口调试助手

本文档介绍一种方法,可以用来仿真串口设备。这样调试PLC程序时可以在没有仪器时用于测试程序的运行。详细代码见: https://download.csdn.net/download/qq_34047402/90477066 C#带有设备仿真功能串口调试助手资源-CSDN文库 步骤如下: 1.把串口设备接收和发送仿真数据放到一…

本地部署 OpenManus 保姆级教程(Windows 版)

一、环境搭建 我的电脑是Windows 10版本&#xff0c;其他的没尝试&#xff0c;如果大家系统和我的不一致&#xff0c;请自行判断&#xff0c;基本上没什么大的出入啊。 openManus的Git地址&#xff1a;https://github.com/mannaandpoem/OpenManus 根据官网的两种安装推荐方式如…

01 | Go 项目开发极速入门课介绍

提示&#xff1a; 所有体系课见专栏&#xff1a;Go 项目开发极速入门实战课。 你好&#xff0c;欢迎学习本课程。本课程是一个 Go 项目开发极速入门课程。旨在帮助刚学习完 Go 基础语法的 Go 开发者&#xff0c;快速掌握如何开发一个功能相对全面的 Go 项目。 根据课程设计目标…

使用 Elastic-Agent 或 Beats 将 Journald 中的 syslog 和 auth 日志导入 Elastic Stack

作者&#xff1a;来自 Elastic TiagoQueiroz 我们在 Elastic 一直努力将更多 Linux 发行版添加到我们的支持矩阵中&#xff0c;现在 Elastic-Agent 和 Beats 已正式支持 Debian 12&#xff01; 本文演示了我们正在开发的功能&#xff0c;以支持使用 Journald 存储系统和身份验…