C++零基础到工程实战(1.1):理解第一个简单且重要的cpp程序

目录

一、本节学习内容概要图

二、前言

三、先整体理解这个程序在做什么

四、逐个拆解每一个部分

[4.1 #include 是什么](#include 是什么)

(1)它的作用是什么

[(2)#include 是什么](#include 是什么)

[(3) 是什么](#(3) 是什么)

[(4)为什么用尖括号 < >](#(4)为什么用尖括号 < >)

[4.2 int main() 是什么](#4.2 int main() 是什么)

[(1)main 为什么这么重要](#(1)main 为什么这么重要)

[(2)为什么只能有一个 main](#(2)为什么只能有一个 main)

[(3)int 是什么意思](#(3)int 是什么意思)

[(4)为什么有时候没写 return 0;](#(4)为什么有时候没写 return 0;)

[(5)() 是什么](#(5)() 是什么)

[4.3 {} 大括号有什么作用](#4.3 {} 大括号有什么作用)

(1)它表示代码块

[(2)为什么 C++ 离不开大括号](#(2)为什么 C++ 离不开大括号)

[4.4 std::cout 是什么](#4.4 std::cout 是什么)

(1)它是标准输出对象

[(2)为什么前面要加 std::](#(2)为什么前面要加 std::)

[(3)为什么不能直接写 cout](#(3)为什么不能直接写 cout)

[4.5 << 是什么](#4.5 << 是什么)

(1)它在这里表示"输出"

(2)为什么符号长得像左移运算符

(3)它可以连续输出多个内容

[4.6 "Hello World!\n" 是什么](#4.6 "Hello World!\n" 是什么)

(1)双引号里的内容叫字符串常量

(2)为什么一定要加双引号

[(3)\n 是什么意思](#(3)\n 是什么意思)

[4.7 ; 分号有什么作用](#4.7 ; 分号有什么作用)

(1)它表示一条语句结束

(2)为什么分号不能省略

五、把整段代码重新翻译一遍

六、本小节需要掌握的内容

(1)#include

(2)main()

(3)int

(4){}

(5)std::cout

(6)<<

(7)双引号

(8)\n

(9);

七、总结


一、本节学习内容概要图


二、前言

对于很多刚接触 C++ 的同学来说,第一个程序通常都是下面这段代码:

cpp 复制代码
#include <iostream>
int main()
{
std::cout << "Hello World!\n";
}

别看它只有短短几行,但这里面其实已经包含了 C++ 最基础的一套程序结构。

很多初学者第一次看到时,往往会有很多疑问:

  • #include <iostream> 是什么意思?
  • 为什么必须写 main()
  • std::cout 又是什么?
  • << 为什么长这样?
  • "Hello World!\n" 后面的 \n 有什么作用?
  • 为什么最后还要加一个分号 ;
  • {} 又是干什么的?

这篇文章就从零开始,把这段代码里涉及到的每一个部分都讲清楚。你不需要一开始就把所有底层原理完全吃透,但至少要知道:每一部分是干什么的、为什么这么写、以后还会在哪里用到。


三、先整体理解这个程序在做什么

如果把它翻译成人话,大概就是:

  1. 先把输出功能对应的工具拿进来;
  2. 告诉系统,程序从 main() 这里开始执行;
  3. 在函数内部输出一句 Hello World!
  4. 输出完成后,程序结束。

也就是说,这段代码不是随便拼起来的,而是有明确顺序的:

  • 头文件 提供功能
  • 主函数 作为入口
  • 语句 完成具体任务
  • 程序结束 返回控制权给系统

四、逐个拆解每一个部分


4.1 #include <iostream> 是什么

(1)它的作用是什么

这一句的作用,可以先简单理解为:

把 C++ 标准库中与输入输出相关的功能"引入进来"。

也就是说,如果没有这句,后面你写的 std::cout 编译器可能就不认识


(2)#include 是什么

#include 是一个预处理指令

所谓预处理,你可以先理解为:真正编译代码之前,编译器会先做一些"提前准备工作"。
其中一种准备工作,就是把你需要的头文件内容"包含"进当前源文件里

所以:

cpp 复制代码
#include <iostream>

并不是让你手动复制一个文件,而是告诉编译器:

请在编译前,把 iostream 这个头文件里的相关声明处理进来。

按住 "Ctrl" 点击 iostream

作用等同于将内部内容复制粘贴过主程序里面去,但是会比较乱

因此,写 **#include <iostream>**会比较简单


(3)<iostream> 是什么

iostream 是 C++ 标准库中的一个头文件,名字可以拆成两部分理解:

  • io:input / output,输入输出
  • stream:流

所以它主要用于提供输入输出流相关功能

最常见的就是:

  • std::cout:标准输出,向控制台输出内容
  • std::cin:标准输入,从键盘读取输入
  • std::endl:换行并刷新缓冲区

在这个 Hello World 程序里,我们只用到了其中的 std::cout


(4)为什么用尖括号 < >

你会看到它写成:

cpp 复制代码
// 你会看到
#include <iostream>

// 而不是:
#include "iostream"

这是因为两种写法一般有不同含义:

  • < >:通常表示包含系统或标准库****头文件
  • " ":通常表示包含自己项目****中的头文件

对于 iostream 这种 C++ 标准库头文件,通常写成 <iostream>


4.2 int main() 是什么


(1)main 为什么这么重要

main程序入口函数

简单说就是:

一个 C++ 程序运行时,系统会从 main() 这个函数开始执行。

不管你的程序多复杂,最终都必须有一个开始位置,而这个开始位置通常就是 main()

所以你可以把它理解为:

  • 这是程序的起点
  • 这是程序"第一步"执行的地方
  • 没有它,程序就不知道从哪里开始

(2)为什么只能有一个 main

在一个可执行程序里,main 一般只能定义一次。

因为程序入口只能有一个。

如果写多个 main,编译器就会不知道到底该从哪一个开始执行。

所以你要记住一点:

一个程序只能有一个主函数 main()


(3)int 是什么意思

int整数类型,这里它表示:

main() 这个函数执行结束后,会返回一个整数值给操作系统。

也就是说,main() 不只是程序入口,它还是一个函数;既然是函数,就有返回值类型。

这里的返回类型写成 int,表示返回一个整数。

通常:

  • 返回 0:表示程序正常结束
  • 返回非 0:通常表示程序异常或出错

例如下面这种写法更完整:

cpp 复制代码
#include <iostream>
int main()
{
std::cout << "Hello World!\n";
return 0;
}

这表示程序执行成功后返回 0。


(4)为什么有时候没写 return 0;

这在现代 C++ 中通常也是可以的。

因为对于 main() 来说,如果执行到结尾没有显式写返回值,编译器通常会默认补一个 return 0;


(5)() 是什么

**函数名后面的圆括号 () 表示:**这是一个函数。

在这里:

cpp 复制代码
main()

表示定义了一个名为 main 的函数。

括号里本来是可以写参数的,例如:

cpp 复制代码
int add(int a, int b)

但当前这个例子中,main() 后面没有参数,所以括号里为空。

你现在可以先记住:

  • 函数名后面有括号,表示这是函数
  • 括号里面可以放参数
  • 当前这段代码先不用管参数,后面学函数时会详细接触

4.3 {} 大括号有什么作用

(1)它表示代码块

{} 表示一个代码块

例如:

cpp 复制代码
int main()
{
std::cout << "Hello World!\n";
}

这里的大括号表示:

main() 这个函数中的代码范围,从左大括号开始,到右大括号结束。

也就是说,大括号里面的内容都属于这个函数。


(2)为什么 C++ 离不开大括号

在 C++ 中,大括号非常重要,因为很多结构都依赖它来界定范围,例如:

  • 函数体
  • if 语句
  • for 循环
  • while 循环
  • 类定义
  • 命名空间

所以你可以把大括号理解成:

划定"这一块代码属于谁"的边界。


4.4 std::cout 是什么

(1)它是标准输出对象

cout 的意思可以理解为:

character output,字符输出。

它用于把内容输出到标准输出设备,通常就是控制台窗口。

而完整写法是:

cpp 复制代码
std::cout

表示它位于 std 这个命名空间中。


(2)为什么前面要加 std::

因为 C++ 标准库里的很多内容都放在 std 命名空间中。

所以在使用 cout 时,要写成:

cpp 复制代码
std::cout

这里的**::** 叫做 作用域解析运算符,意思相当于:

std 这个作用域里去找 cout

你可以简单理解为:

  • **std**是一个"名字仓库"
  • cout 是这个仓库里的一个工具
  • std::cout 就是在说:使用标准库里的 cout

(3)为什么不能直接写 cout

因为编译器默认并不知道你说的 cout 是哪个 cout
C++ 里可能有不同作用域、不同库中的同名标识符。

所以标准写法是:

cpp 复制代码
std::cout

后面你会学到一种简化写法:

cpp 复制代码
using namespace std;

这样可以临时省略 std::,直接写 cout

但对于初学阶段,我更建议你保留 std::,因为这样能帮助你更清楚地理解:

这个东西来自标准库。


4.5 << 是什么

(1)它在这里表示"输出"

在下面这句里:

cpp 复制代码
std::cout << "Hello World!\n";

<< 的作用可以先理解为:

把右边的内容送给左边的输出对象。

也就是说:

  • 左边 std::cout 是输出目标
  • 右边 "Hello World!\n" 是要输出的内容
  • << 表示把内容传给输出流

所以整句话的意思就是:

让控制台输出 Hello World!,然后换行。


(2)为什么符号长得像左移运算符

确实,<< 在 C++ 里本来也是一个运算符,叫左移运算符

但在流输出场景里,它被重载成了输出运算符。

这也是 C++ 的一个特点:

同一个符号,在不同上下文里可能有不同含义。

对于初学者,你先不用纠结重载机制,只要先记住:

  • std::cout << ... 里,<< 表示输出
  • 它的读取方式就是"把右边内容输出到左边"

(3)它可以连续输出多个内容

例如:

cpp 复制代码
std::cout << "我的年龄是:" << 18 << "\n";

这表示连续把多个内容输出到控制台。

所以 << 后面不一定只能接字符串,还可以接:

  • 整数
  • 小数
  • 字符
  • 变量
  • 表达式结果

4.6 "Hello World!\n" 是什么

(1)双引号里的内容叫字符串常量

cpp 复制代码
"Hello World!\n"

这是一段字符串

C++ 中,用双引号括起来的一串字符,通常表示****字符串字面量

例如:

cpp 复制代码
"你好"
"abc"
"C++"

都属于字符串。


(2)为什么一定要加双引号

如果不写双引号:

cpp 复制代码
Hello World!

编译器会把它当成一些它看不懂的标识符,而不是文本内容。

所以双引号的作用就是告诉编译器:

这是一段普通文本,请按字符内容处理。


(3)\n 是什么意思

\n 是一个转义字符,表示换行

所以:

cpp 复制代码
"Hello World!\n"

实际上表示的是:

  • 先输出 Hello World!
  • 然后光标移动到下一行

如果没有 \n,下一次输出内容时就可能会接在同一行后面。


4.7 ; 分号有什么作用

(1)它表示一条语句结束

在 C++ 中,分号通常表示:

这一条语句到这里结束。


(2)为什么分号不能省略

如果漏掉分号,编译器会报错,因为它无法正确判断这条语句在哪里结束。

所以分号在 C++ 中非常关键。

很多初学者写程序报错,原因并不是逻辑复杂,而只是漏了一个分号


五、把整段代码重新翻译一遍

现在我们已经把每个部分都拆开了,再来重新理解整段代码:

cpp 复制代码
#include <iostream>
int main()
{
std::cout << "Hello World!\n";
}

它的意思就是:

  • 引入输入输出功能对应的头文件 iostream
  • 定义一个名为 main 的函数,程序从这里开始执行
  • 在函数体内部,通过 std::cout 向控制台输出字符串 Hello World!
  • \n 让输出后换行
  • 分号表示这条输出语句结束
  • 大括号表示 main 函数的代码范围

六、本小节需要掌握的内容

学完这一节后,至少应该掌握下面这些最核心的点:

(1)#include <iostream>

用于引入标准输入输出相关功能。

(2)main()

程序入口,程序从这里开始执行。

(3)int

表示函数返回一个整数值。

(4){}

表示函数体,也就是代码块范围。

(5)std::cout

标准输出对象,用于向控制台输出内容。

(6)<<

输出运算符,把右边内容送到左边的输出流中。

(7)双引号

表示字符串内容。

(8)\n

表示换行。

(9);

表示一条语句结束。


七、总结

Hello World 虽然是 C++ 中最简单的程序,但它并不只是"打印一句话"这么简单。

它其实是你理解 C++ 程序结构的第一扇门。

通过这一个程序,你已经接触到了:

  • 头文件
  • 程序入口
  • 函数
  • 代码块
  • 标准输出
  • 字符串
  • 转义字符
  • 语句结束符
相关推荐
划破黑暗的第一缕曙光2 个月前
[C++]:1.C++基础
c++·c++基础
橘颂TA10 个月前
【C++】入门基础知识(1.5w字详解)
开发语言·c++·c++基础
@forever@2 年前
C/C++区别、优劣详解!!!!!
c语言·开发语言·c++·windows·类和对象·c++基础·c/c++区别
@forever@2 年前
C/C++内存管理
c语言·开发语言·c++·操作系统·内存管理·内存泄漏·c++基础