【C/C++】C/C++编程——变量和常量

简介: 【C/C++】C/C++编程——变量和常量

大家好,我是 shopeeai,也可以叫我虾皮,中科大菜鸟研究生。今天我们来一起来学习C++中的变量和常量。

变量


变量是编程中的基本概念,它是存储信息的容器,这些信息或数据在程序执行过程中可以被修改。每个变量都有指定的类型,决定了变量可以存储什么类型的数据以及对变量可以执行哪些操作。

变量的声明

在 C++ 中声明变量时,你需要指定变量的类型和名称。例如:

int age; // 声明一个整型变量age
double salary; // 声明一个双精度浮点变量salary
char grade; // 声明一个字符型变量grade

声明变量时可以同时初始化它,即在声明时给它赋一个初始值:

int age = 25; // 声明并初始化整型变量age
double salary = 3000.50; // 声明并初始化双精度浮点变量salary
char grade = 'A'; // 声明并初始化字符型变量grade
变量命名规则

字母和数字:变量名可以包含字母(a-z,A-Z)和数字(0-9),但必须以字母或下划线(_)开头。数字不能作为变量名的第一个字符。

下划线:变量名可以包含下划线(_),并且可以以下划线开头。但是,以单个下划线开头的变量名在全局命名空间中有特殊含义,通常用于实现的内部或保留使用,因此应避免使用。

大小写敏感:C++ 是大小写敏感的语言,这意味着 Variable、variable 和 VARIABLE 会被视为不同的变量名。

关键字限制:不能使用 C++ 的关键字(如 int、return、class 等)作为变量名。关键字在 C++ 语言中有特殊的意义和用途。

长度限制:理论上,变量名的长度没有限制,但是为了可读性和实用性,建议保持在合理的长度内。过长的变量名可能会使代码难以阅读和理解。

变量的类型

C++ 提供了多种数据类型,主要包括:


  • 整数类型:如 int, short, long, long long 等。
  • 浮点类型:如 float, double, long double 等,用于表示小数。
  • 字符类型:char,用于表示单个字符。
  • 布尔类型:bool,表示逻辑值 true 或 false。

下面是一个简单的 C++ 代码示例,其中包含了几个不同类型的变量。我将对每行代码进行注释,并在代码示例之后提供一个总体的解释。

#include <iostream> // 包含输入输出流库

using namespace std; // 使用标准命名空间

int main() {
    int age = 30; // 定义一个整型变量age并初始化为30,用于存储年龄
    float height = 5.9; // 定义一个浮点型变量height并初始化为5.9,用于存储身高(单位:英尺)
    char grade = 'A'; // 定义一个字符型变量grade并初始化为'A',用于存储等级
    bool isGraduated = true; // 定义一个布尔型变量isGraduated并初始化为true,表示是否毕业
    string name = "John Doe"; // 定义一个字符串变量name并初始化为"John Doe",用于存储名字

    // 使用cout进行输出
    cout << "Name: " << name << endl; // 输出名字
    cout << "Age: " << age << endl; // 输出年龄
    cout << "Height: " << height << " feet" << endl; // 输出身高,附带单位
    cout << "Grade: " << grade << endl; // 输出等级
    cout << "Graduated: " << (isGraduated ? "Yes" : "No") << endl; // 输出是否毕业,使用三元运算符判断

    return 0; // 程序正常结束
}

运行结果

这段代码首先包含了 C++ 的标准输入输出流库 iostream,允许使用 cout 来输出信息到终端(屏幕)。使用 using namespace std; 声明之后,我们可以直接使用 std 命名空间中的所有内容,如 cout 和 endl,而无需在它们前面加上 std:: 前缀。


在 main 函数中,我们定义并初始化了几种不同类型的变量:


int age = 30; 定义了一个整数类型的变量 age,用于存储年龄,并将其初始化为 30。

float height = 5.9; 定义了一个浮点类型的变量 height,用于存储身高,并将其初始化为 5.9 英尺。

char grade = 'A'; 定义了一个字符类型的变量 grade,用于存储等级,并将其初始化为 'A'。

bool isGraduated = true; 定义了一个布尔类型的变量 isGraduated,用于表示是否毕业,并将其初始化为 true。

string name = "John Doe"; 定义了一个字符串类型的变量 name,用于存储名字,并将其初始化为 "John Doe"。

接下来,使用 cout 和 endl 来输出这些变量的值。cout 是 C++ 中用于标准输出的对象,endl 是一个操纵符,用于在输出后添加换行符。


对于布尔变量 isGraduated,我们使用了三元运算符 (isGraduated ? "Yes" : "No") 来决定输出 "Yes" 还是 "No",这个三元运算符面会详细讲解。


最后,main 函数通过返回 0 正常结束,这是向操作系统表明程序成功执行的传统方式。


常量代表在程序执行过程中其值不可更改的变量。使用常量可以提高程序的可读性和维护性,因为它们允许给经常使用的值赋予易于理解的名字,同时确保这些值不会被意外修改。

常量

常量的定义与初始化


在 C++ 中,可以使用 const 关键字来定义常量。声明常量时,必须在声明中初始化它,因为之后无法修改其值。例如:

const int MAX_USERS = 100;  // 整型常量
const double PI = 3.14159;  // 浮点型常量


这里,MAX_USERS 和 PI 一旦被赋值,它们的值就不能再被改变。

字面量常量


字面量常量是直接在代码中硬编码的常量值。例如,42、3.14 和 'A' 分别是整型、浮点型和字符型的字面量常量。在 C++11 中,可以使用用户定义的字面量来扩展字面量常量的类型和功能。

整型常量

整型常量可以是十进制、八进制或十六进制。八进制常量以数字 0 开头,十六进制常量以 0x 或 0X 开头。例如:

const int decVal = 42;   // 十进制
const int octVal = 042;  // 八进制
const int hexVal = 0x42; // 十六进制


浮点型常量

浮点型常量包括小数点或指数部分(或两者兼有),可以表示为单精度(f 或 F 后缀)或双精度(无后缀或 l 或 L 后缀)。例如:

const double pi = 3.14159;  // 双精度
const float e = 2.71828f;   // 单精度
字符常量

字符常量是用单引号括起来的单个字符。C++ 中的字符常量实际上是整型值,它们表示对应字符在字符集中的编号。可以使用转义序列来表示特殊字符。例如:

const char newline = '\n';  // 换行符
const char tab = '\t';      // 制表符


常量表达式(constexpr)

C++11 引入了 constexpr 关键字,允许将变量、函数等声明为常量表达式。常量表达式在编译时就被计算,而不是在运行时,这有助于提高程序的性能。例如:

constexpr int getArraySize() {
    return 32;
}

int myArray[getArraySize()];  // 使用常量表达式作为数组大小

下面是一个简单的 C++ 程序示例,该程序演示了如何使用常量和变量来计算圆的面积。

#include <iostream> // 包含头文件iostream,用于输入输出流

// 定义PI为常量,表示圆周率的近似值
const double PI = 3.14159;

int main() {
    double radius; // 声明一个双精度浮点型变量radius,用于存储圆的半径
    double area;   // 声明一个双精度浮点型变量area,用于存储圆的面积

    std::cout << "Enter radius: "; // 向标准输出打印提示信息,请求用户输入圆的半径
    std::cin >> radius; // 从标准输入读取用户输入的值,并将其赋给变量radius

    area = PI * radius * radius; // 计算圆的面积,公式为PI*radius^2

    // 向标准输出打印圆的面积,使用 << 运算符将文本和变量值发送到cout
    std::cout << "The area of the circle with radius " << radius << " is " << area << std::endl;

    return 0; // 程序结束,返回0表示成功
}

运行结果


这个程序首先包含了头文件 iostream,它是 C++ 标准库中负责输入输出的部分。在程序的开始,我们定义了一个常量 PI,它代表圆周率的值。这个常量在程序的任何地方都不能被修改。


在 main 函数中,我们声明了两个类型为 double 的变量 radius 和 area。radius 用于存储用户输入的圆的半径,而 area 用于存储计算出的圆的面积。


接着,程序通过 std::cout 向用户显示提示信息,请求用户输入圆的半径。用户的输入通过 std::cin 读取并存储在变量 radius 中。


使用圆的面积公式 PI * radius * radius 计算面积,并将结果存储在变量 area 中。最后,程序使用 std::cout 输出圆的半径和计算出的面积。


程序以返回值 0 结束,这是一个通用的约定,表示程序成功执行结束。这个简单的示例展示了常量和变量的定义和使用,以及基本的输入输出操作。

目录
相关文章
|
2月前
|
监控 Linux C++
4步实现C++插件化编程,轻松实现功能定制与扩展(2)
本文是《4步实现C++插件化编程》的延伸,重点介绍了新增的插件“热拔插”功能。通过`inotify`接口监控指定路径下的文件变动,结合`epoll`实现非阻塞监听,动态加载或卸载插件。核心设计包括`SprDirWatch`工具类封装`inotify`,以及`PluginManager`管理插件生命周期。验证部分展示了插件加载与卸载的日志及模块状态,确保功能稳定可靠。优化过程中解决了动态链接库句柄泄露问题,强调了采纳用户建议的重要性。
93 28
4步实现C++插件化编程,轻松实现功能定制与扩展(2)
|
3月前
|
存储 缓存 C++
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
C++ 标准模板库(STL)提供了一组功能强大的容器类,用于存储和操作数据集合。不同的容器具有独特的特性和应用场景,因此选择合适的容器对于程序的性能和代码的可读性至关重要。对于刚接触 C++ 的开发者来说,了解这些容器的基础知识以及它们的特点是迈向高效编程的重要一步。本文将详细介绍 C++ 常用的容器,包括序列容器(`std::vector`、`std::array`、`std::list`、`std::deque`)、关联容器(`std::set`、`std::map`)和无序容器(`std::unordered_set`、`std::unordered_map`),全面解析它们的特点、用法
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
|
3月前
|
存储 机器学习/深度学习 编译器
【C++终极篇】C++11:编程新纪元的神秘力量揭秘
【C++终极篇】C++11:编程新纪元的神秘力量揭秘
|
3月前
|
存储 算法 C++
深入浅出 C++ STL:解锁高效编程的秘密武器
C++ 标准模板库(STL)是现代 C++ 的核心部分之一,为开发者提供了丰富的预定义数据结构和算法,极大地提升了编程效率和代码的可读性。理解和掌握 STL 对于 C++ 开发者来说至关重要。以下是对 STL 的详细介绍,涵盖其基础知识、发展历史、核心组件、重要性和学习方法。
|
3月前
|
存储 安全 算法
深入理解C++模板编程:从基础到进阶
在C++编程中,模板是实现泛型编程的关键工具。模板使得代码能够适用于不同的数据类型,极大地提升了代码复用性、灵活性和可维护性。本文将深入探讨模板编程的基础知识,包括函数模板和类模板的定义、使用、以及它们的实例化和匹配规则。
|
7月前
|
安全 程序员 编译器
【实战经验】17个C++编程常见错误及其解决方案
想必不少程序员都有类似的经历:辛苦敲完项目代码,内心满是对作品品质的自信,然而当静态扫描工具登场时,却揭示出诸多隐藏的警告问题。为了让自己的编程之路更加顺畅,也为了持续精进技艺,我想借此机会汇总分享那些常被我们无意间忽视却又导致警告的编程小细节,以此作为对未来的自我警示和提升。
1009 33
|
6月前
|
消息中间件 存储 安全
|
3月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
1月前
|
编译器 C++ 容器
【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)
C++11为C++带来了革命性变化,引入了列表初始化、右值引用、移动语义、类的新默认成员函数和lambda表达式等特性。列表初始化统一了对象初始化方式,initializer_list简化了容器多元素初始化;右值引用和移动语义优化了资源管理,减少拷贝开销;类新增移动构造和移动赋值函数提升性能;lambda表达式提供匿名函数对象,增强代码简洁性和灵活性。这些特性共同推动了现代C++编程的发展,提升了开发效率与程序性能。
65 12
|
2月前
|
设计模式 安全 C++
【C++进阶】特殊类设计 && 单例模式
通过对特殊类设计和单例模式的深入探讨,我们可以更好地设计和实现复杂的C++程序。特殊类设计提高了代码的安全性和可维护性,而单例模式则确保类的唯一实例性和全局访问性。理解并掌握这些高级设计技巧,对于提升C++编程水平至关重要。
62 16