C++基础语法全面解析

发布于:2025-09-05 ⋅ 阅读:(13) ⋅ 点赞:(0)

C++ 的基本语法是理解和掌握这门强大编程语言的第一步。下面我将详细梳理,内容会涵盖程序结构、注释、变量与数据类型、运算符、控制结构、函数等核心概念。

🖥 一、程序结构与 Hello World

每个 C++ 程序都有一个基本的结构框架,通常包括头文件包含命名空间使用和主函数 main()

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

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

int main() { // 主函数,程序执行的入口点
    cout << "Hello, World!" << endl; // 输出 "Hello, World!" 并换行
    return 0; // 返回 0,表示程序正常结束
}
  • #include <iostream>:这是一个预处理指令,用于引入标准输入输出库,使我们能够使用 cin(标准输入)和 cout(标准输出)等对象。
  • using namespace std;:这行代码声明使用标准命名空间 stdcoutendl等都定义在 std命名空间中。使用这行代码后,就不必每次都写 std::cout,直接写 cout即可。
  • int main():这是程序的主函数,是任何可执行 C++ 程序的入口点。程序从这里开始执行。
  • cout << ... << endl;cout是标准输出流对象,用于向控制台(屏幕)输出信息。<<流插入运算符,用于将内容插入到输出流中。endl是一个操纵器,表示插入换行符并刷新输出缓冲区
  • return 0;main函数返回一个整数给操作系统。返回 0通常表示程序成功执行。其他非零值通常用于指示不同的错误类型。

一个稍复杂的程序结构可能还包括全局变量、函数声明等:

#include <iostream>
#include <string> // 引入字符串支持

// 全局常量声明
const double PI = 3.14159; 

// 函数声明 (函数原型)
double calculateArea(double radius); 

int main() {
    // 局部变量
    std::string message = "Learning C++"; 
    // 使用 std:: 前缀,因为未使用 using namespace std;
    
    // ... 其他逻辑,比如调用 calculateArea 函数
    
    return 0;
}

// 函数定义
double calculateArea(double radius) {
    return PI * radius * radius;
}

💬 二、注释 (Comments)

注释是代码中非执行的部分,用于解释代码、提高可读性或临时禁用代码。C++支持两种注释:

  • 单行注释:以 //开始,直到行末。

    // 这是一个单行注释
    int age = 25; // 声明一个整型变量并初始化
    
  • 多行注释:以 /*开始,以 */结束,可以跨越多行。

    /* 这是一个多行注释,
       可以包含很多行内容。
       常用于函数或文件的头部说明 */
    

🔢 三、变量与常量 (Variables & Constants)

变量是用于存储数据的命名内存空间,其值可以改变。常量是其值在程序运行期间不可改变的量。

1. 变量
  • 声明与初始化:变量需指定其数据类型,可以在声明时初始化,也可以先声明后赋值。

    int age; // 声明一个整型变量 age (未初始化,其值不确定)
    age = 25; // 为变量 age 赋值
    double price = 99.99; // 声明一个双精度浮点变量 price 并初始化
    char grade = 'A'; // 声明一个字符变量 grade 并初始化
    bool isOnline = true; // 声明一个布尔变量 isOnline 并初始化
    
2. 常量
  • 使用 const关键字声明常量,必须在声明时初始化,且之后不能修改。

    const double PI = 3.1415926; // 声明一个双精度浮点常量 PI
    const int MAX_SIZE = 100; // 声明一个整型常量 MAX_SIZE
    // PI = 3.14; // 错误!常量的值不可修改
    
  • 常量命名通常推荐使用大写字母和下划线,以增强可读性。

变量与常量的区别
特性 变量 常量
是否可变 值可以改变 值一旦初始化便不可改变
声明方式 数据类型 变量名; const 数据类型 常量名 = 值;
初始化 可以在声明时或后续代码中初始化 必须在声明时初始化
内存分配 运行时在内存中分配空间 编译时常量可能被直接替换到代码中

📊 四、数据类型 (Data Types)

C++ 是一种静态类型语言,要求在编译时明确所有变量的类型。数据类型决定了变量存储的大小和布局、值的范围以及可执行的操作。

C++ 的数据类型大致可分为:

  • 基本内置类型 (Fundamental/Built-in Types)
  • 派生类型 (Derived Types)
  • 用户自定义类型 (User-defined Types)

下面是一个关于常见基本数据类型的表格,包含了它们的典型大小和用途:

数据类型 含义 典型大小 取值范围或描述 示例
int 整型 4 字节 -2,147,483,648 到 2,147,483,647 int count = 100;
short 短整型 2 字节 -32,768 到 32,767 short s = 32767;
long 长整型 4 或 8 字节 范围更大 long l = 100000L;
long long 超长整型 8 字节 −9.2×10¹⁸ 到 9.2×10¹⁸ long long ll = ...
float 单精度浮点型 4 字节 约 ±3.4e±38,6-7 位有效数字 float f = 3.14f;
double 双精度浮点型 8 字节 约 ±1.7e±308,15-16 位有效数字 double d = 3.14159
long double 扩展精度浮点型 8, 12 或 16 字节 精度和范围更大 long double ld = ...
char 字符型 1 字节 通常表示字符(如 ‘A’),也可表示小整数(-128 到 127 或 0 到 255) char c = 'A';
bool 布尔型 1 字节 truefalse bool flag = true;
void 无类型 N/A 主要用于指示函数不返回任何值 void func();

类型修饰符signed(有符号,默认)和 unsigned(无符号,仅表示非负数)可以用于修饰整型,改变其取值范围。例如 unsigned int positiveNumber = 42;

类型转换

  • 隐式转换(自动转换):编译器自动进行,例如在整数和浮点数混合运算时,整数会转换为浮点数。

    int num = 10;
    double result = num / 4.0; // num 被隐式转换为 double 类型参与计算
    
  • 显式转换(强制转换):程序员手动指定转换。

    double pi = 3.14159;
    int approxPi = (int)pi; // C风格强制转换,approxPi 为 3
    int anotherApprox = static_cast<int>(pi); // C++风格强制转换,更安全推荐[1](@ref)
    

🧮 五、运算符 (Operators)

运算符用于执行各种运算和操作。

1. 算术运算符

用于基本的数学计算。

运算符 描述 示例 结果 (设 a=10, b=3)
+ 加法 a + b 13
- 减法 a - b 7
* 乘法 a * b 30
/ 除法 a / b 3 (整数除法)
/ 除法 10.0 / 3.0 3.333… (浮点除法)
% 取模(取余) a % b 1 (10除以3的余数)

注意:整数除法会截断小数部分

2. 关系运算符

用于比较两个值的大小关系,返回 true(1) 或 false(0)。

运算符 描述 示例 结果 (设 x=5, y=10)
== 等于 x == y false(0)
!= 不等于 x != y true(1)
> 大于 x > y false(0)
< 小于 x < y true(1)
>= 大于等于 x >= y false(0)
<= 小于等于 x <= y true(1)
3. 逻辑运算符

用于连接或修改布尔逻辑条件,返回 truefalse

运算符 描述 示例 结果
&& 逻辑与 true && false false(两边都为真才为真)
` ` 逻辑或
! 逻辑非 !true false(取反)

短路求值:逻辑与 (&&) 和逻辑或 (||) 运算符支持短路求值。例如,a && b,如果 afalse,则不会计算 b的值,因为结果已确定是 false

4. 赋值运算符

用于给变量赋值。

运算符 例子 等价于
= a = b a = b
+= a += b a = a + b
-= a -= b a = a - b
*= a *= b a = a * b
/= a /= b a = a / b
%= a %= b a = a % b
5. 递增和递减运算符

用于将变量的值增加或减少 1。

运算符 描述 效果
++a 前置递增 先加1,然后返回新的值
a++ 后置递增 先返回原来的值,然后加1
--a 前置递减 先减1,然后返回新的值
a-- 后置递减 先返回原来的值,然后减1

示例:

int a = 5;
int b = ++a; // a 先变为 6,然后 b 被赋值为 6
int c = a++; // c 被赋值为 6,然后 a 再变为 7
6. 其他运算符
  • 三元条件运算符 (? :):简单的条件判断。

    int a = 10, b = 20;
    int min = (a < b) ? a : b; // 如果 a < b 为真,min = a,否则 min = b
    
  • 逗号运算符 (,):从左到右依次计算表达式,整个表达式的值是最后一个表达式的值。

    int a = (1, 2, 3); // a 的值为 3
    
  • 位运算符:对整数在二进制位层次上进行操作,如 &(按位与), |(按位或), ^(按位异或), ~(按位取反), <<(左移), >>(右移)。

  • sizeof运算符:返回类型或对象的大小(字节数)。

    cout << sizeof(int) << endl; // 通常输出 4
    

🚦 六、控制结构 (Control Structures)

控制结构用于控制程序的执行流程。

1. 条件语句
  • if 语句

    int score = 85;
    if (score >= 90) {
        cout << "优秀" << endl;
    } else if (score >= 80) {
        cout << "良好" << endl;
    } else if (score >= 70) {
        cout << "中等" << endl;
    } else {
        cout << "待提高" << endl;
    }
    // 输出:良好
    
  • switch 语句:基于一个整型或枚举表达式的值进行多分支选择。

    char grade = 'B';
    switch (grade) {
        case 'A':
            cout << "Excellent" << endl;
            break; // 跳出 switch
        case 'B':
        case 'C': // 多个 case 可以共享同一段代码
            cout << "Well done" << endl;
            break;
        case 'D':
            cout << "Pass" << endl;
            break;
        default: // 所有 case 都不匹配时执行
            cout << "Invalid grade" << endl;
    }
    // 输出:Well done
    

    注意:忘记 break会导致** case 穿透**,继续执行下一个 case的语句。

2. 循环语句
  • for 循环:适合已知循环次数的场景。

    // 打印 0 到 4
    for (int i = 0; i < 5; i++) { // 初始化; 条件; 更新
        cout << i << " ";
    }
    cout << endl;
    

    范围 for 循环 (C++11):简化对容器(如数组)的遍历。

    int arr[] = {1, 2, 3, 4, 5};
    for (int element : arr) { // 遍历数组 arr 的每个元素
        cout << element << " ";
    }
    cout << endl;
    
  • while 循环先判断条件,再执行循环体。适合不确定循环次数但需条件满足才执行的场景。

    int count = 5;
    while (count > 0) {
        cout << count << " ";
        count--;
    }
    cout << endl; // 输出:5 4 3 2 1
    
  • do-while 循环先执行一次循环体,再判断条件。循环体至少执行一次。

    int input;
    do {
        cout << "Enter a positive number (0 to exit): ";
        cin >> input;
        if (input > 0) {
            cout << "You entered: " << input << endl;
        }
    } while (input != 0);
    
3. 跳转语句
  • break:立即终止最内层的 switchforwhiledo-while循环。
  • continue:跳过当前循环迭代的剩余代码,直接开始下一次循环的条件判断。
  • return:从当前函数返回。
  • goto:无条件跳转到同一函数内的标记语句处(慎用,容易使程序流程混乱)。

📋 七、函数 (Functions)

函数是用于执行特定任务的独立代码块,提高代码的复用性可读性

1. 函数的定义与调用
// 函数定义
// 返回类型 函数名(参数列表) { 函数体 }
int add(int a, int b) { // a 和 b 是形式参数
    int sum = a + b; // 执行计算
    return sum; // 使用 return 语句返回值
}

// 函数声明(可在头文件中)
// int add(int a, int b);

int main() {
    int result = add(3, 4); // 函数调用,传递参数 3 和 4(实际参数)
    cout << result; // 输出: 7
    return 0;
}
2. 函数重载 (Function Overloading)

C++ 允许函数重载,即多个函数可以拥有相同的名字,只要它们的参数列表(参数类型、数量或顺序)不同。

void print(int i) {
    cout << "整数: " << i << endl;
}
void print(double f) {
    cout << "浮点数: " << f << endl;
}
void print(const string& s) {
    cout << "字符串: " << s << endl;
}

int main() {
    print(10); // 调用 void print(int i)
    print(3.14); // 调用 void print(double f)
    print("Hello"); // 调用 void print(const string& s)
    return 0;
}
3. 默认参数 (Default Arguments)

可以为函数参数指定默认值。调用时如果省略该参数,则使用默认值。默认参数必须从右向左依次指定

void greet(string name, string greeting = "Hello") {
    cout << greeting << ", " << name << "!" << endl;
}

int main() {
    greet("Alice"); // 输出: Hello, Alice!
    greet("Bob", "Hi"); // 输出: Hi, Bob!
    return 0;
}

C++ 的基本语法是构建程序的基石。掌握这些基础后,你将能更好地理解和运用 C++ 的更强大特性,如面向对象编程(类、对象、封装、继承、多态)、标准模板库 (STL)(容器、算法)、指针与内存管理异常处理等。

学习编程最好的方式就是多动手实践。尝试为每个知识点编写代码,观察结果,并尝试做一些小修改看看会有什么变化。祝你学习愉快!


网站公告

今日签到

点亮在社区的每一天
去签到