当前位置: 首页 > article >正文

【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.kler.cn/a/583001.html

相关文章:

  • 版本控制器Git(2)
  • [数据结构]排序之希尔排序( 缩小增量排序 )
  • upload-labs-master通关攻略(13~16)
  • 计算机视觉|一文读懂NeRF:为3D场景重建带来新突破
  • CMD批处理一些冷门命令,编写windows脚本常用?
  • java每日精进 3.11 【多租户】
  • ST电机库电流采样 三电阻单ADC
  • Oracle VirtualBox安装CentOS 7
  • FFmpeg入门:最简单的音视频播放器(Plus优化版)
  • dns劫持是什么?常见的劫持类型有哪些?如何预防?
  • XML Schema 实例
  • 深入理解 HTML 链接:网页导航的核心元素
  • 【Deepseek基础篇】--v3基本架构
  • 初学者快速入门Python爬虫 (无废话版)
  • 从零开始的python学习(五)P75+P76+P77+P78+P79+P80
  • Linux ALSA 驱动核心知识点解析
  • OpenHarmony-分布式硬件关键技术
  • redis增加ip白名单
  • 【day11】智慧导览:AR内容加载性能指标
  • 电力行业中 对输电和配电的所有数据实现实时监测与控制