C++基礎語法


C++基礎語法

基礎語法

第一個程序

#include <iostream>
using namespace std;


int main()
{
    
    cout << "Hello world" <<endl;
    return 0;

}
#include <iostream>

包含了一個iostream的文件頭。頭文件作為一種包含功能函數、數據接口聲明的載體文件,通常編譯器通過頭文件找到對應的函數庫,把引用的函數實際內容導出來。

<>引起來代表導入的是標准庫的頭文件,而使用""引起來的則是導入用戶自定義的頭文件。

using namespace std;

使用std命名空間。

return 0;

終止 main ( ) 函數,並向調用進程返回值 0。

注釋

作用:在代碼中加一些說明和解釋,方便自己或其他程序員程序員閱讀代碼

兩種格式

  1. 單行注釋// 描述信息
    • 通常放在一行代碼的上方,或者一條語句的末尾,對該行代碼說明
  2. 多行注釋/* 描述信息 */
    • 通常放在一段代碼的上方,對該段代碼做整體說明

提示:編譯器在編譯代碼時,會忽略注釋的內容

快捷鍵:
Ctrl+K → 選定需要注釋的代碼段 →Ctrl+C

取消注釋:
Ctrl+K → 選定需要取消注釋的代碼段 →Ctrl+U

變量

作用:給一段指定的內存空間起名,方便操作這段內存

語法數據類型 變量名 = 初始值;

int main()
{
	int a = 10;
	cout << a << endl;

}

常量

作用:用於記錄程序中不可更改的數據

C++定義常量兩種方式

  1. #define 宏常量: #define 常量名 常量值

    • 通常在文件上方定義,表示一個常量
  2. const修飾的變量 const 數據類型 常量名 = 常量值

    • 通常在變量定義前加關鍵字const,修飾該變量為常量,不可修改。

define 宏常量:

#include <iostream>
using namespace std;
#define day 7//注意這里沒分號

int main()
{

	cout << "一周里總共有 " << day << " 天" << endl;
	

}

const修飾變量:

int main()
{
	const int day = 7;

	cout << "一周里總共有 " << day << " 天" << endl;
	

}

關鍵字

作用:關鍵字是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++中能夠表示整型的類型有以下幾種方式,區別在於所占內存空間不同

數據類型 占用空間 取值范圍
short(短整型) 2字節 (-2^15 ~ 2^15-1)
int(整型) 4字節 (-2^31 ~ 2^31-1)
long(長整形) Windows為4字節,Linux為4字節(32位),8字節(64位) (-2^31 ~ 2^31-1)
long long(長長整形) 8字節 (-2^63 ~ 2^63-1)

sizeof關鍵字

作用:利用sizeof關鍵字可以統計數據類型所占內存大小

語法: sizeof( 數據類型 / 變量)

nt main()
{
	int a = 10;
	long b = 20;
	char c = 'a';

	cout << "a:" << sizeof(a) << endl;
	cout << "b:" << sizeof(b) << endl;
	cout << "c:" << sizeof(c) << endl;

	

}

結果:

a:4b:4c:1

實型(浮點型)

作用:用於表示小數

浮點型變量分為兩種:

  1. 單精度float
  2. 雙精度double

兩者的區別在於表示的有效數字范圍不同。

數據類型 占用空間 有效數字范圍
float 4字節 7位有效數字
double 8字節 15~16位有效數字
int main(){	float f1 = 3.14f;	double f2 = 3.14;    	cout << sizeof(f1)<<":" << f1 << endl;	cout << sizeof(f2) << ":" << f2 << endl;        float f3 = 3e-2;  // 3 * 0.1 ^ 2	cout << "f3 = " << f3 << endl;}

結果:

4:3.148:3.14f3 = 0.03

字符型

作用:字符型變量用於顯示單個字符

語法char ch = 'a';

注意1:在顯示字符型變量時,用單引號將字符括起來,不要用雙引號

注意2:單引號內只能有一個字符,不可以是字符串

C和C++中字符型變量只占用1個字節

int main(){		char ch = 'a';	cout << ch << endl;	cout << sizeof(char) << endl;	cout << (int)ch << endl;  //查看字符a對應的ASCII碼	ch = 97; //可以直接用ASCII給字符型變量賦值	cout << ch << endl;	return 0;}

結果:

a197a

轉義字符

`

轉義字符 含義 ASCII碼值(十進制)
\a 警報 007
\b 退格(BS) ,將當前位置移到前一列 008
\f 換頁(FF),將當前位置移到下頁開頭 012
\n 換行(LF) ,將當前位置移到下一行開頭 010
\r 回車(CR) ,將當前位置移到本行開頭 013
\t 水平制表(HT) (跳到下一個TAB位置) 009
\v 垂直制表(VT) 011
\\ 代表一個反斜線字符"" 092
' 代表一個單引號(撇號)字符 039
" 代表一個雙引號字符 034
? 代表一個問號 063
\0 數字0 000
\ddd 8進制轉義字符,d范圍0~7 3位8進制
\xhh 16進制轉義字符,h范圍09,af,A~F 3位16進制

字符串型

作用:用於表示一串字符

兩種風格

int main(){		char str1[] = "hello wordld";	cout << str1 << endl; //c語言風格	string str2 = "hello wordld"; //c++風格	cout << str2 << endl;	return 0;}

C++風格字符串,需要加入頭文件#include<string>

布爾類型 bool

int main() {	bool flag = true;	cout << flag << endl; // 1	flag = false;	cout << flag << endl; // 0	cout << "size of bool = " << sizeof(bool) << endl; //1			return 0;}

數據的輸入

	//整型輸入	int a = 0;	cout << "請輸入整型變量:" << endl;	cin >> a;	cout << a << endl;

運算符

運算符類型 作用
算術運算符 用於處理四則運算
賦值運算符 用於將表達式的值賦給變量
比較運算符 用於表達式的比較,並返回一個真值或假值
邏輯運算符 用於根據表達式的值返回真值或假值

算術運算符

運算符 術語 示例 結果
+ 正號 +3 3
- 負號 -3 -3
+ 10 + 5 15
- 10 - 5 5
* 10 * 5 50
/ 10 / 5 2
% 取模(取余) 10 % 3 1
++ 前置遞增 a=2; b=++a; a=3; b=3;
++ 后置遞增 a=2; b=a++; a=3; b=2;
-- 前置遞減 a=2; b=--a; a=1; b=1;
-- 后置遞減 a=2; b=a--; a=1; b=2;

賦值運算符

運算符 術語 示例 結果
= 賦值 a=2; b=3; a=2; b=3;
+= 加等於 a=0; a+=2; a=2;
-= 減等於 a=5; a-=3; a=2;
*= 乘等於 a=2; a*=2; a=4;
/= 除等於 a=4; a/=2; a=2;
%= 模等於 a=3; a%2; a=1;

比較運算符

運算符 術語 示例 結果
== 相等於 4 == 3 0
!= 不等於 4 != 3 1
< 小於 4 < 3 0
> 大於 4 > 3 1
<= 小於等於 4 <= 3 0
>= 大於等於 4 >= 1 1

邏輯運算符

運算符 術語 示例 結果
! !a 如果a為假,則!a為真; 如果a為真,則!a為假。
&& a && b 如果a和b都為真,則結果為真,否則為假。
|| a || b 如果a和b有一個為真,則結果為真,二者都為假時,結果為假。

選擇結構

if語句

單if

	int score = 0;	cout << "請輸入一個分數:" << endl;	cin >> score;if (score > 600)	{		cout << "我考上了一本大學!!!" << endl;	}

多if

多行格式if語句:if(條件){ 條件滿足執行的語句 }else{ 條件不滿足執行的語句 };

int main() {	int score = 0;	cout << "請輸入考試分數:" << endl;	cin >> score;	if (score > 600)	{		cout << "我考上了一本大學" << endl;	}	else	{		cout << "我未考上一本大學" << endl;	}	system("pause");	return 0;}

多條件的if語句:if(條件1){ 條件1滿足執行的語句 }else if(條件2){條件2滿足執行的語句}... else{ 都不滿足執行的語句}

int main() {int score = 0;cout << "請輸入考試分數:" << endl;cin >> score;if (score > 600){	cout << "我考上了一本大學" << endl;}else if (score > 500){	cout << "我考上了二本大學" << endl;}else if (score > 400){	cout << "我考上了三本大學" << endl;}else{	cout << "我未考上本科" << endl;}system("pause");return 0;}

三目運算符

作用: 通過三目運算符實現簡單的判斷

語法表達式1 ? 表達式2 :表達式3

解釋:

如果表達式1的值為真,執行表達式2,並返回表達式2的結果;

如果表達式1的值為假,執行表達式3,並返回表達式3的結果。

int a = 10;	int b = 20;	int c = 30;	c = a ? a : b;	cout << c << endl;	

switch循環

switch(表達式){	case 結果1:執行語句;break;	case 結果2:執行語句;break;	...	default:執行語句;break;}

循環結構

while循環

while (num < 10)	{		cout << "num = " << num << endl;		num++;	}

在執行循環語句時候,程序必須提供跳出循環的出口,否則出現死循環

do while循環語句

語法: do{ 循環語句 } while(循環條件);

與while的區別在於do...while會先執行一次循環語句,再判斷循環條件

int main() {	int num = 0;	do	{		cout << num << endl;		num++;	} while (num < 10);			system("pause");	return 0;}

for循環語句

語法: for(起始表達式;條件表達式;末尾循環體) { 循環語句; }

int main() {	for (int i = 0; i < 10; i++)	{		cout << i << endl;	}		system("pause");	return 0;}

跳轉語句

break語句

break使用的時機:

  • 出現在switch條件語句中,作用是終止case並跳出switch
  • 出現在循環語句中,作用是跳出當前的循環語句
  • 出現在嵌套循環中,跳出最近的內層循環語句

continue語句

作用:循環語句中,跳過本次循環中余下尚未執行的語句,繼續執行下一次循環

goto語句

作用:可以無條件跳轉語句

語法: goto 標記;

解釋:如果標記的名稱存在,執行到goto語句時,會跳轉到標記的位置

cout << "1" << endl;	goto FLAG;	cout << "2" << endl;	cout << "3" << endl;	FLAG:		cout << "4" << endl;	cout << "5" << endl;	cout << "6" << endl;	cout << "7" << endl;		cout << "8" << endl;
145678

數組

所謂數組,就是一個集合,里面存放了相同類型的數據元素

特點1:數組中的每個數據元素都是相同的數據類型

特點2:數組是由連續的內存位置組成的

定義方式:

  1. 數據類型 數組名[ 數組長度 ];
  2. 數據類型 數組名[ 數組長度 ] = { 值1,值2 ...};
  3. 數據類型 數組名[ ] = { 值1,值2 ...};
int main(){		int scores[10];	//利用下標賦值	scores[0] = 100;	scores[1] = 99;	scores[2] = 85;	//利用下標輸出	cout << scores[0] << endl;	cout << scores[1] << endl;	cout << scores[2] << endl;	return 0;}

數組名

  1. 可以統計整個數組在內存中的長度
  2. 可以獲取數組在內存中的首地址
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };	cout << sizeof(arr)/ sizeof(arr[0]) << endl; //計算數組元素個數

通過數值名獲取數組內容中的首地址

	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };	cout << (int)arr << endl;	cout << "數組中第一個元素地址為: " << (int)&arr[0] << endl;	cout << "數組中第二個元素地址為: " << (int)&arr[1] << endl;

函數

作用:將一段經常使用的代碼封裝起來,減少重復代碼

一個較大的程序,一般分為若干個程序塊,每個模塊實現特定的功能。

函數的定義

函數的定義一般主要有5個步驟:

1、返回值類型

2、函數名

3、參數表列

4、函數體語句

5、return 表達式

語法:

返回值類型 函數名 (參數列表){       函數體語句       return表達式}
  • 返回值類型 :一個函數可以返回一個值。在函數定義中
  • 函數名:給函數起個名稱
  • 參數列表:使用該函數時,傳入的數據
  • 函數體語句:花括號內的代碼,函數內需要執行的語句
  • return表達式: 和返回值類型掛鈎,函數執行完后,返回相應的數據
int add(int num1, int num2) {	return num1 + num2;}int main(){	int num = add(1, 2);	cout << num << endl;	return 0;}

值傳遞

  • 所謂值傳遞,就是函數調用時實參將數值傳入給形參
  • 值傳遞時,==如果形參發生,並不會影響實參

值傳遞時,形參是修飾不了實參的

函數的聲明

作用: 告訴編譯器函數名稱及如何調用函數。函數的實際主體可以單獨定義。

  • 函數的聲明可以多次,但是函數的定義只能有一次
//聲明int max(int a, int b);int max(int a, int b);//定義int max(int a, int b){	return a > b ? a : b;}

函數的分文件編寫

作用:讓代碼結構更加清晰

函數分文件編寫一般有4個步驟

  1. 創建后綴名為.h的頭文件
  2. 創建后綴名為.cpp的源文件
  3. 在頭文件中寫函數的聲明
  4. 在源文件中寫函數的定義
 // swap.h 內容#include <iostream>using namespace std;int add(int num1, int num2);//swap.cpp文件#include "swap.h"int add(int num1, int num2) {	return num1 + num2;}//main  #include <iostream>#include "swap.h"using namespace std;int main(){	int num = add(1, 1);	cout << num << endl;	return 0;}  

指針

指針的作用: 可以通過指針間接訪問內存

  • 內存編號是從0開始記錄的,一般用十六進制數字表示
  • 可以利用指針變量保存地址

我們要取他的值是時候,或者要賦值的時候,要在指針前面加 * 號,而我要改變他的指向的時候是不加 * 號的。

不加 * 號 是對變量本身的操作,加了 * 號是對指針變量所指向位置的操作。

指針變量的定義和使用

指針變量定義語法: 數據類型 * 變量名;

int a=10;	int * p; //聲明指針變量	p = &a;//指針指向變量a的地址	//指針使用	cout << &a << endl; //打印a地址	cout << p << endl;//打印指針變量	cout << "*p:" << *p << endl;

結果:

005AFE48005AFE48*p:10

指針變量和普通變量的區別

  • 普通變量存放的是數據,指針變量存放的是地址
  • 指針變量可以通過" * "操作符,操作指針變量指向的內存空間,這個過程稱為解引用

總結1: 我們可以通過 & 符號 獲取變量的地址

總結2:利用指針可以記錄地址

總結3:對指針變量解引用,可以操作指針指向的內存

總結4:所有指針類型在32位操作系統下是4個字節

空指針

int main() {	//指針變量p指向內存地址編號為0的空間	int * p = NULL;	//訪問空指針報錯 	//內存編號0 ~255為系統占用內存,不允許用戶訪問	cout << *p << endl;	system("pause");	return 0;}

野指針:指針變量指向非法的內存空間

int main{    int* p = (int*)0x100;cout << *p << endl;return 0;    }

總結:空指針和野指針都不是我們申請的空間,因此不要訪問。

const修飾指針

const修飾指針有三種情況

  1. const修飾指針 --- 常量指針
  2. const修飾常量 --- 指針常量
  3. const 修飾指針,又修飾常量
int a = 10;	int b = 10;	//1. const修飾的是指針,指針指向可以改,指針指向的值不可以更改	const int* p1 = &a; //a取值給p1	p1 = &b;   //b取值給p1	cout << p1 << endl;   	//*p1 = 100;  報錯	//2. const修飾的是常量,指針指向不可以改,指針指向的值可以更改	int* const p2 = &a;	//p2 = &b; //錯誤	*p2 = 100;	cout << *p2 << endl; //值等於100

看const右側緊跟着的是指針還是常量, 是指針就是常量指針,是常量就是指針常量。

常量指針:指針指向可以改,指針指向的值不可以更改

指針常量:指針指向不可以改,指針指向的值可以更改

const 修飾指針,又修飾常量:都不可更改。

指針和數組

作用:利用指針訪問數組中元素

int arr[] = { 1,2,3,4,5,6,7,8,9,10 };	int* p = arr;// //指向數組的指針	cout << *p << endl;	for (int i = 0; i < 10; i++)	{		//利用指針遍歷數組		cout << *p << endl;		p++;//偏移	}

指針和函數

作用:利用指針作函數參數,可以修改實參的值

void swap1(int a, int b){	int temp = a;	a = b;	b = temp;}int main(){		int a = 10;	int b = 20;	swap1(a, b); // 值傳遞不會改變實參	cout << "a = " << a << endl;	cout << "b = " << b << endl;    //結果:1=10,b= 20

實參未發生改變。

void swap2(int *p1, int *p2){	int temp = *p1;	*p1 = *p2;	*p2 = temp;}int main(){		int a = 10;	int b = 20;	swap2(&a,&b); // 值傳遞不會改變實參	cout << "a = " << a << endl;	cout << "b = " << b << endl;}//結果:a= 20,b=10

總結:如果不想修改實參,就用值傳遞,如果想修改實參,就用地址傳遞。

結構體

結構體屬於用戶自定義的數據類型,允許用戶存儲不同的數據類型

通過結構體創建變量的方式有三種:

  • struct 結構體名 變量名
  • struct 結構體名 變量名 = { 成員1值 , 成員2值...}
  • 定義結構體時順便創建變量
struct Person{	string name;	int age;	int score;};int main() {	//方式一	Person person;	person.name = "nice0e3";	person.age = 22;	person.score = 10;	cout << person.name << endl;	cout << person.age << endl;	cout << person.score << endl;	//方式二	Person persion1 = { "nice0e3",22,10 };	cout << persion1.name << endl;	cout << persion1.age << endl;	cout << persion1.score << endl;	return 0;}

總結1:定義結構體時的關鍵字是struct,不可省略

總結2:創建結構體變量時,關鍵字struct可以省略

總結3:結構體變量利用操作符 ''.'' 訪問成員

結構體數組

語法: struct 結構體名 數組名[元素個數] = { {} , {} , ... {} }

struct Person{	string name;	int age;	int score;};int main() {	Person arr[3] = {	{"張三",18,80 },	{"李四",19,60 },	{"王五",20,70 }	};	for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); i++)	{		cout << arr[i].name << "\n" << endl;		cout << arr[i].age << "\n" << endl;		cout << arr[i].score << "\n" << endl;	}

構造體指針

作用:通過指針訪問結構體中的成員

  • 利用操作符 -> 可以通過結構體指針訪問結構體屬性
#include <iostream>#include "maincpp.h"using namespace std;struct Person{	string name;	int age;	int score;};int main() {	struct Person person = { "張三",18,100};	Person * p = &person;	cout << p->name << "\n" << endl;	cout << p->age << "\n" << endl;	cout << p->score << "\n" << endl;}

結構體做函數參數

作用:將結構體作為參數向函數中傳遞

傳遞方式有兩種:

  • 值傳遞
  • 地址傳遞
struct Person{	string name;	int age;	int score;};void printStudent(Person stu){	stu.age = 28;	cout << "子函數中 姓名:" << stu.name << " 年齡: " << stu.age << " 分數:" << stu.score << endl;}//地址傳遞void printStudent2(Person* stu){	stu->age = 28;	cout << "子函數中 姓名:" << stu->name << " 年齡: " << stu->age << " 分數:" << stu->score << endl;}int main() {	struct Person person1 = { "張三",18,100};	struct Person person2 = { "李四",22,100};	printStudent(person1);	printStudent2(&person2);}

如果不想修改主函數中的數據,用值傳遞,反之用地址傳遞

結構體中 const使用場景

作用:用const來防止誤操作

void printStudent2(const Person* stu){	//stu->age = 28;	cout << "子函數中 姓名:" << stu->name << " 年齡: " << stu->age << " 分數:" << stu->score << endl;}int main() {	struct Person person2 = { "李四",22,100};	printStudent2(&person2);}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM