C++从0到1入门:基础语法核心知识点详解

作者:半吊子全栈工匠2026.11.07 01:54浏览量:0

简介:本文面向零基础学习者,系统梳理C++入门阶段的核心语法:从宏常量与const常量的差异、标识符命名规范,到整型、浮点型、字符型、字符串与布尔类型的选择要点,再到cin/cout输入输出以及取模、递增、赋值、比较等运算符的规则细节,并配以可运行示例与常见坑点提示,帮助你把基础打牢、少走弯路。

一、入门阶段:把语法细节当作“地基”来打磨

很多初学者觉得C++难,往往不是难在宏观概念,而是难在细节:单引号写成了双引号、取模用在了小数上、把比较的==敲成了赋值的=。这类小错误轻则编译报错,重则埋下运行期隐患。因此,入门阶段最有效的学习方式,是沿着“常量与变量→命名规则→数据类型→输入输出→运算符”这条主线,把每个知识点的“为什么”和“边界条件”都弄清楚。本文按这条主线展开,所有示例均可直接编写、运行、验证。

二、常量:两种写法与本质区别

2.1 #define 宏常量

宏常量一般写在函数体之外(通常位于文件开头):

  1. #define PI 3.14159

它的本质是预处理阶段的文本替换:编译开始前,代码中所有PI都会被原样替换成3.14159。编译器并不知道PI是什么类型,也不会对它做类型检查。

2.2 const 修饰的常量

const写在函数体中或函数体外均可,语法为“const 数据类型 常量名 = 常量值”,即在变量定义前加关键字const,将其修饰为不可修改的常量:

  1. const double PI = 3.14159;

要点有二:

  • 定义时必须初始化,否则编译报错;
  • 一旦定义,任何对其重新赋值的语句都会被编译器拒绝。

2.3 如何选择

宏是“无类型的文本替换”,const常量“有类型、有作用域、参与类型检查”。因此工程实践中通常优先使用const,宏常量多见于C风格的旧代码。

三、关键字与标识符命名规则

C++保留了一批关键字(如int、double、const、if、for、return等)供语言自身使用,定义变量时不能与关键字重名。

标识符的四条硬性规则:

  1. 不可以是关键字;
  2. 只能由字母、数字、下划线组成;
  3. 严格区分大小写:sum与Sum是两个不同的标识符;
  4. 第一个字符只能是字母或下划线,不能是数字(如2day非法,day2合法)。

在此之上,再补充几条通用的编码建议:

  • 见名知义:studentCount远比a、b1这类名字可读;
  • 风格统一:变量名可用小驼峰或下划线风格,常量名常用全大写加下划线;
  • 避免以下划线开头的名字,减少与标准库、编译器内部命名冲突的可能。

四、数据类型:内存占用与选择策略

4.1 整型

  • short:2字节;
  • int:4字节(最常用);
  • long:宽度与平台相关,Windows下通常4字节,64位Linux下为8字节。

sizeof运算符可实测任意类型或变量占用的内存大小:

  1. cout << "short占用 " << sizeof(short) << " 字节" << endl;
  2. cout << "int占用 " << sizeof(int) << " 字节" << endl;

由于long的宽度依赖平台,写跨平台代码时不要凭记忆假设长度,用sizeof确认。日常表示一般整数首选int;范围不够时可用long long(通常8字节)。

4.2 浮点型

float占4字节,有效数字约6~7位;double占8字节,有效数字约15~16位。默认建议用double,精度更稳。

两个容易被忽略的细节:

1)浮点字面量默认是double类型。若要明确得到float,在数字后面加f:

  1. float f1 = 3.14f; // 明确的float字面量
  2. double d1 = 3.14; // 默认double

2)科学计数法(e前是尾数,e后是10的幂指数):

  1. float f2 = 3e2; // 3 × 10^2 = 300
  2. float f3 = 3e-2; // 3 × 10^-2 = 0.03

另外提醒:浮点数在二进制中往往无法精确表示,判断两个浮点数“相等”时通常不做精确的==比较,而是判断差值是否小于一个极小阈值。

4.3 字符型

char占1字节,存放单个字符,字面量必须用单引号,且引号内只能有一个字符:

  1. char ch = 'A'; // 正确
  2. char ch2 = 'AB'; // 错误:单引号中只能放一个字符

字符的本质是整数(按ASCII编码存储):’A’是65、’a’是97、’0’是48。因此char可以参与整数运算,大小写转换可借助加减32实现。

转义字符用来表示那些无法直接显示或不便输入的ASCII字符,均以反斜杠开头:

  • \n:换行,把输出位置移到下一行开头;
  • \t:水平制表,把输出位置推进到下一个制表位(通常按8列对齐),与前面已输出的字符合计占据整齐的宽度,常用于让多列输出对齐;
  • \:表示反斜杠字符本身。
  1. cout << "姓名\t年龄\t成绩" << endl;

4.4 字符串的两种写法

1)C风格:字符数组加双引号:

  1. char str[] = "hello world";

注意它末尾隐藏着一个’\0’作为结束标志,因此数组实际长度比可见字符数多1。

2)C++风格:string:

  1. #include <string>
  2. string s = "hello world";

string支持拼接、比较、求长度等操作,类型安全、用法直观,现代C++应优先使用,前提是包含头文件。有的教程会使用一个把常用头文件全部包含进去的聚合头文件,它并非C++标准内容、可移植性差,算法练习场合尚可,正式工程不建议依赖。

4.5 布尔类型

bool只占1个字节,取值只有true与false:

  1. bool flag = true;
  2. cout << flag << endl; // 输出1

true输出为1,false输出为0;在条件判断中“非0即真”,任何非0数值都会被视为true。

五、数据的输入与输出

  • 输出:cout <<,可链式连续拼接多个内容;
  • 输入:cin >>,也可连续读取多个变量。
  1. int a = 0;
  2. cout << "请输入一个整数:";
  3. cin >> a;
  4. cout << "你输入的是:" << a << endl;

两个好习惯:输入前先给出提示语;变量声明时就初始化(如int a = 0;),避免使用未定义的值。

六、运算符:规则与高频坑点

6.1 算术运算与取模

  • 除法:两个整数相除,结果仍是整数,小数部分直接截断;想得到小数结果,至少让其中一个操作数是浮点数,例如10.0 / 4得到2.5,而10 / 4得到2;
  • 除数不能为0:整数除以0是致命的运行错误,取模运算同样要求除数非0;
  • 取模%:即求余数,只适用于整数——两个小数做取模运算无法通过编译。

6.2 前置递增与后置递增

  1. int a1 = 10;
  2. int b1 = ++a1 * 10; // 前置:先自增再参与运算,a1=11,b1=110
  3. int a2 = 10;
  4. int b2 = a2++ * 10; // 后置:先参与运算再自增,a2=11,b2=100

两者最终都会让变量+1,区别只在于“本次表达式使用的是自增前还是自增后的值”。建议不要在同一个表达式里对同一变量多次自增,容易引发未定义行为,拆成独立语句最稳妥。

6.3 赋值运算符与复合赋值

=把右侧的值写入左侧变量;算术运算符可与=组合成复合赋值形式:

  1. int a = 10;
  2. a += 2; // 等价于 a = a + 2,此时a为12
  3. // 同理:a -= 2; a *= 2; a /= 2; a %= 2;

6.4 比较运算符

==、!=、>、<、>=、<=的结果是布尔值:条件成立为1(true),不成立为0(false):

  1. int a = 3, b = 5;
  2. int r = (a == b); // a与b不相等,r为0

两点建议:
1)比较表达式适当加括号,如(a == b),让优先级一目了然,可读性更好;
2)警惕把==误写成=:if (a = b)会先执行赋值再用b的真假做判断,语义完全偏离“比较”。一个防御性技巧是把常量写在左边(如3 == a),一旦漏写一个=,编译器会立即报错提醒。

七、小结与练习建议

用一张清单回顾全文要点:

  • 常量:#define是文本替换、无类型;const有类型、必须初始化、不可修改,优先使用;
  • 命名:非关键字、仅由字母数字下划线组成、区分大小写、首字符为字母或下划线;
  • 整型:short 2字节、int 4字节、long随平台变化,用sizeof实测;
  • 浮点:float 4字节(字面量加f后缀)、double 8字节(默认),科学计数法3e2=300、3e-2=0.03;
  • 字符:单引号单字符,本质是ASCII整数;转义字符\n换行、\t制表对齐、\表示反斜杠;
  • 字符串:C风格char数组或string(记得包含);
  • 布尔:1字节,true为1、false为0,非0即真;
  • 输入输出:cin >> 与 cout <<;
  • 运算:除数非0、小数不能取模、前置先加后用/后置先用后加、复合赋值简化书写、比较表达式加括号。

最后给一条练习方法:每学一个知识点,立刻写一个最小程序验证;再“故意写错”一次(给const重新赋值、用小数取模、给char赋两个字符),观察编译器如何报错。读懂错误信息的过程,本身就是最快的基础训练。把这些细节内化成肌肉记忆后,再进入流程控制、函数与面向对象等内容,学习曲线会平缓得多。