一.運算符的優先級
一共15個級別
- 最高優先級 : () []
- 最低優先級 :逗號表達式
- 倒數第二低優先級 : 賦值和符合賦值(=,==,-=...)
- ?! >算術運算符 > 關系運算符 > && >> || >賦值運算符
二.數據類型轉換
- ?隱式類型轉換
- 算數轉換
- char int long longlong float double
- 盡量不丟失精度,會將計算結果往精度大的類型轉換
- 例如 : 15 + 3.14? ? =>? ?15.0? +3.14
- 賦值轉換
- int x = 3.14*10.0;
- 轉換為int類型時候,因為賦值符號的左邊變量為int,則將類型轉換為int類型
- 結果為 31
- 輸出轉換(C語言)
- printf("%c",255+50);?
- 305的二進制數是 0000 0001 0011 0001,由于超過了一個字節所能存儲的最大數,,所以會將0000 0001擠到第二個字節里面去,該字節就存放0011 0001,十進制為49,即ASCLL碼為49,轉換為字符為 ' 1 '
- 若按%d 進行輸出,則輸出為305,因為int占四個字節,足夠容納305的二進制
- 算數轉換
- 強制類型轉換
- c語言 (數據類型)數據? ?(int)3.14
- c++語言? ?數據類型(數據) int(3.14)
- x? = (char)257 + 100;
- 257為int類型,其二進制為 1 0000 0001,轉換成char類型會將保留8位,結果位0000 0001,這樣結果在和int類型的100相加,等于 1+ 100? = 101
- 高級強制類型轉換
- static_cast
- dynamic_cast
- reinterpert_cast
三.switch和if的選擇
- switch : 用于 int char long longlong類型的變量,和多個特定常量的判斷處理
- float和都變了類型不可以
- if適用于各種邏輯判斷
- switch一定能改為if,if不一定能改為switch
四.const int*p與int*?const p 的區別
????????
int i =0;
int t = 2;
const int *p = &i;//可以改變p的指向,但是不能通過*p改變指向變量的值
int* const p1 = &i;//可以通過*p改變指向變量的值,但是不能在指向其他變量了
//*p = 3;//error
//p = &t;//pass
//*p1 =3;//pass
//p1 = &t;error
- 常量指針可以指向常量或變量,不能將常量指針賦值給普通指針
五.底層Const和頂層Const的區別
- 底層const用于修飾指針或引用目標對象,表示目標對象是常量,不可修改。
- 頂層const用于修飾指針或引用本身,表示指針或引用本身是常量,無法指向其他對象。
-
頂層const,指針本身是常量
六.不安全函數
- scanf_s函數
int x;
scanf_s("%d",&x);//不需要使用第三個參數,用法和scanf相同float f;
scanf_s("%f",&f);//不需要使用第三個參數,用法和scanf相同char c;
scanf_s("%c",&c,sizeof(c));//需要使用第三個參數,否則有警告char name[16];
scnaf_s("%s",name,sizeof(name));//需要使用第三個參數int age;
char name[16];
scanf_s("%d%s",&age,name,sizeof(name));
- gets函數不能使用
- 使用gets_s,gets函數是老標準C語言函數,vs使用更安全的C11標準,使用對應的gets_s
char line[32];
gets_s(line,sizeof(line));
?六.cin>> 返回值
- if((cin>>word) == 0){}//在vs里面不能通過編譯
- 解決方法
if(!(cin>>word)){}//方法1if((bool)(cin>>word) == 0){}//方法2
七.getline返回值是cin
- 返回值是cin
getline(cin, word) >> count;
if(getline(cin,line)==0){}//錯誤,不能通過編譯
- 解決方案和上面cin的解決方法一樣,可以強制轉換類型或者加上邏輯非
八.計算機英語加油站
- bool 布爾 邏輯類型
- if? ? ? ? ?如果
- else? ? ?否則
- switch??開關
- case? ? ?情況
- default? ?默認
- commit? 提交
- clone? ? ?克隆? ?復制
九.goto語句
- 例子 :
string ret;
for(int i = 0;i<5;i++){cout<<"開始第"<<i+1<<"次相親..."<<endl;cout<<"你喜歡打王者嗎?"<<endl;cin>>ret;if(ret != "yes") continue;else{cout<<"我中意你,你中意我嗎?"<<endl;cin>>ret;if(ret == "yes"){goto happy;}}
}
happy :cout<<"幸福生活"<<endl;cout<<"開啟幸福之旅"<<endl;return 0;
}
- goto在應用開發中不建議用,會破壞程序的結構性,一般用在底層開發,追求效率
- 語法 :goto 標志;? ? 標志:
- goto在應用開發中一般將標志后面的語句封裝為函數,進行函數調用 ; 或者用flag進行標記,標記成立執行標志后的代碼
- 標簽必須和goto 標志;必須放在同一個函數內,不能跨函數,但是可以在同一個函數的任何位置
十.cmd
- 切換盤 直接 d:或者c:
- 進入某個文件,用cd 例如 cd d:\ceshi,就會進入d盤下的ceshi目錄
- 查看編碼用chcp(活動碼)
- 修改編碼用: chcp? 編碼? ,例如 chcp? 936,會改為936編碼
- 在一個目錄下放兩個exe文件,利用破解.exe | 客戶.exe,會將前面程序的輸出數據,通過管道作為后面文件的輸入數據
- 利用dir查看目錄下面的文件
十一.VS播放音樂
- 頭文件?
#include<mmsystem.h>
#prama comment(lib,"winmm.lib")
- 加載音樂代碼
mciSendString(_T("play 音樂地址 repeat"),0,0,0);
- _T可以用多字符集替代
- play 播放
- repeat 重復
十二.寬度與對其
- c++中的設置文本寬度頭文件為#include<iomanip>,語句為setw(寬度)
- 設置對其 : 例如左對齊 std::left
十三.原地交換字符串
- 當left = right時,沒有必要再交換,也可也用于交換其他數據類型
string str;int left,right;cout<<"輸入一個字符串: ";cin>>str;left = 0;right = str.length()-1;while (left<right){char tmp = str[left];str[left] = str[right];str[right] = tmp;left++;right--;}cout<<str<<endl;
十四.終端
- 控制終端大小
- mode con cols = 列數,lines =行數
- system("任何終端命令");,再system里面可以寫任何終端命令進行執行
- 例如 : system("mode con cols=40 lines=15");
十五.string轉char*類型
- 函數c_str()函數可以將string類型轉換為從const char*類型
using namespace std;
void print(const char * str){cout<<str;
}
int main() {string str = "LiHua";const char* p = str.c_str();//const,char*類型print(str);//這樣會報錯,形參與實參的類型不匹配print(str.c_str());//不會報錯,將string 轉成const char*
}