C++基礎初識
C++初識
第一個C++程序
在 Linux 下編寫一個 C++ 程序,總共分為 4 個步驟
- 創建目錄
- 創建文件
- 編寫代碼
- 編譯並運行程序
創建目錄
先創建一個單獨的目錄,用來存放當前示例:
mkdir hello_cpp
cd hello_cpp
創建文件
創建一個 main.cpp 文件:
touch main.cpp
編寫代碼
#include<iostream>
using namespace std;
int main() {
// 程序从 main 函数开始执行,下面的语句会按顺序运行。
cout << "Hello world" << endl;
// 返回 0 表示程序正常结束。
return 0;
}
運行/觀察結果: 運行後會按輸出語句打印對應內容,變量值可結合初始化、賦值和函數調用順序推導。
編譯並運行程序
使用 g++ 編譯,然後運行生成的可執行文件:
g++ main.cpp -std=c++17 -Wall -Wextra -o main
./main
終端輸出:
Hello world
main函數參數
main 函數不是必須帶參數。最常見的兩種寫法是:
int main()
{
// 程序从 main 函数开始执行,下面的语句会按顺序运行。
// 返回 0 表示程序正常结束。
return 0;
}
運行/觀察結果: 這是最簡潔的程序入口,適合不需要讀取命令行參數的程序。
int main(int argc, char* argv[])
{
// 程序从 main 函数开始执行,argc/argv 用来接收命令行参数。
// 返回 0 表示程序正常结束。
return 0;
}
運行/觀察結果: 這也是標準的程序入口寫法,適合需要讀取命令行參數的程序。
其中:
argc表示命令行參數的數量,通常至少為 1,因為程序自身的路徑也會算作一個參數。argv表示命令行參數數組,argv[0]通常是程序自身的路徑或名稱,argv[1]開始才是用戶傳入的參數。char* argv[]也可以寫成char** argv,兩者在這裡表達的含義相同。
示例:
#include<iostream>
using namespace std;
int main(int argc, char* argv[]) {
// 程序从 main 函数开始执行,argc/argv 用来接收命令行参数。
cout << "argc = " << argc << endl;
for (int i = 0; i < argc; i++) {
cout << "argv[" << i << "] = " << argv[i] << endl;
}
// 返回 0 表示程序正常结束。
return 0;
}
運行結果:見下方“運行結果”;argv[0] 會隨啟動方式不同而變化,重點觀察 argc 和各個 argv 的對應關係。
編譯並運行:
g++ main.cpp -std=c++17 -Wall -Wextra -o args_demo
./args_demo hello 123
運行結果:
argc = 3
argv[0] = ./args_demo
argv[1] = hello
argv[2] = 123
注意:
argv[0]的具體內容和啟動方式有關,可能是./args_demo,也可能是完整路徑。實際處理參數時,通常從argv[1]開始讀取用戶輸入的內容。
註釋
作用:在代碼中加一些說明和解釋,方便自己或其他程序員程序員閱讀代碼
兩種格式
- 單行註釋:
// 描述信息- 通常放在一行代碼的上方,或者一條語句的末尾,==對該行代碼說明==
- 多行註釋:
/* 描述信息 */- 通常放在一段代碼的上方,==對該段代碼做整體說明==
提示:編譯器在編譯代碼時,會忽略註釋的內容
變量
作用:給一段指定的內存空間起名,方便操作這段內存
語法:数据类型 变量名 = 初始值;
示例:
#include<iostream>
using namespace std;
int main() {
//变量的定义
//语法:数据类型 变量名 = 初始值
int a = 10;
cout << "a = " << a << endl;
return 0;
}
運行/觀察結果: 運行後會按輸出語句打印對應內容,變量值可結合初始化、賦值和函數調用順序推導。
注意:C++在創建變量時,必須給變量一個初始值,否則會報錯
常量
作用:用於記錄程序中不可更改的數據
C++定義常量兩種方式
- #define 宏常量:
#define 常量名 常量值- ==通常在文件上方定義==,表示一個常量
- const修飾的變量
const 数据类型 常量名 = 常量值- ==通常在變量定義前加關鍵字const==,修飾該變量為常量,不可修改
示例:
//1、宏常量
#define day 7
int main() {
cout << "一周里总共有 " << day << " 天" << endl;
//day = 8; //报错,宏常量不可以修改
//2、const修饰变量
const int month = 12;
cout << "一年里总共有 " << month << " 个月份" << endl;
//month = 24; //报错,常量是不可以修改的
return 0;
}
運行/觀察結果: 運行後會按輸出語句打印對應內容,變量值可結合初始化、賦值和函數調用順序推導。
關鍵字
**作用:**關鍵字是C++中預先保留的單詞(標識符)
- 在定義變量或者常量時候,不要用關鍵字
C++關鍵字如下:
| asm | do | if | return | typedef |
|---|---|---|---|---|
| auto | double | inline | short | typeid |
| bool | dynamic_cast | int | signed | typename |
| break | else | long | sizeof | union |
| case | enum | mutable | static | unsigned |
| catch | explicit | namespace | static_cast | using |
| char | export | new | struct | virtual |
| class | extern | operator | switch | void |
| const | false | private | template | volatile |
| const_cast | float | protected | this | wchar_t |
| continue | for | public | throw | while |
| default | friend | register | true | |
| delete | goto | reinterpret_cast | try |
提示:在给变量或者常量起名称时候,不要用C++得关键字,否则会产生歧义。
標識符命名規則
作用:C++規定給標識符(變量、常量)命名時,有一套自己的規則
- 標識符不能是關鍵字
- 標識符只能由字母、數字、下劃線組成
- 第一個字符必須為字母或下劃線
- 標識符中字母區分大小寫
建議:給標識符命名時,爭取做到見名知意的效果,方便自己和他人的閱讀
C 與 C++ 的關係和學習路線
C/C++介紹:
C和C++是兩種的高級計算機語言,常見的高級語言還有Python,Rust,Go,C#(C Sharp、C++++),Java,JavaScript,LinuxShell等等。
C++語言是在C語言的基礎上,添加了面向對象、模板等現代程序設計語言的特性而發展起來的。兩者無論是從語法規則上,還是從運算符的數量和使用上,都非常相似,所以我們常常將這兩門語言統稱為“C/C++”。
C語言和C++並不是對立的競爭關係: 1)C++是C語言的加強,是一種更好的C語言,實際上C++和C語言是同一門語言的不同版本。 2)C++是以C語言為基礎的,並且完全兼容C語言的特性。 C語言和C++語言的學習是可以相互促進。學好C語言,可以為我們將來進一步地學習C++語言打好基礎,而C++語言的學習,也會促進我們對於C語言的理解,從而更好地運用C語言。
| 特性 | C 語言 | C++ 語言 |
|---|---|---|
| 編程範式 | 面向過程 | 多範式,支持面向對象 |
| 內存管理 | 手動管理 | 手動管理,提供 RAII(資源獲取即初始化) |
| 代碼複用性 | 較低 | 高,通過類、繼承、模板等實現 |
| 標準庫 | 標準 C 庫 | 標準模板庫(STL)和 C 標準庫 |
| 運行效率 | 高 | 稍低於 C,但差距不大 |
| 應用場景 | 操作系統、嵌入式 | 遊戲開發、圖形處理、大型應用 |
| 類型檢查 | 較鬆散 | 較嚴格,提供更多類型檢查 |
**本文只負責指導一些問題,學****C/C++**還是以下列視頻為主:
C/C++環境配置:電控組環境搭建大全
- C++ 視頻教程:
https://www.bilibili.com/video/BV1et411b73Z
- 鵬哥C語言視頻:
https://www.bilibili.com/video/BV1cq4y1U7sg
- 菜鳥教程: