c++學習筆記(部分適用於c語言)

前言:

首先,糾正一個可能的認知錯誤。編程語言並非專指以某種名稱命名的語言,而是一類編程規範,或者說語法規則。

拿BASIC(初學者通用指令代碼)舉例, 基於BASIC衍生出了VB、QB等語言,它們統稱爲BASIC語言,完全適用於BASIC的語法,但由於開發者的目的不同,他們又有各自適合的方面。VB是微軟公司開發出的可視化編程語言,可以很容易開發出擁有圖形界面的軟件。QB也是由微軟基於BASIC開發的,但它是面向過程的。

筆記:

1.using namespace std;不要用在頭文件裏,可能會造成命名衝突,在源文件裏可以適當使用。

2.播放聲音:使用mciSendCommand函數播放聲音時,需要這樣,而且位置不能變

#include<windows.h>
#include<Mmsystem.h>
#pragma comment(lib,"winmm.lib")

3.不要使用delete多次釋放同一個用new產生的變量,最好new和delete配套使用。

4.頭文件中只能放聲明,執行代碼放到.cpp/.c文件中,用#include導入頭文件。使用“#include<>”時,編譯程序會自動到默認文件夾下尋找頭文件,使用“#include“””時,編譯程序先在用戶文件下尋找頭文件,沒有的話再回到默認文件夾尋找。因此,自定義的頭文件應放在與你的.cpp/.c文件同一目錄下,用“#include""”導入。

5.算法是整個程序中最關鍵的部分,一個良好的算法會使程序的執行效率非常高,因此,不要在沒想清楚的情況下就直接去寫程序,走一步算一步的編程思維會浪費你更多的時間,慢慢的你就會發現程序會越寫越複雜,每一段程序都是在給之前的程序填坑。以至於最後寫出來的程序即使能執行,效率也十分的低下,還會隱藏更多的錯誤。

6.使用vector可以靈活的定義數組。當你不知道要用多大的數組時,可以使用vector,任意修改數組的容量,向其中加入元素。如果本來數組就可能會有很多元素,建議在聲明時就聲明一個合適大小的數組,不夠再添加就行了。這樣有助於提高程序效率,vector每添加一個元素,就會檢查是否有足夠的容量儲存,不夠的話,會自動尋找一個比原數組大1.5到2倍的儲存存空間,再把數組複製過去,這就解釋了爲什麼應該預定義一個合適大小的數組。要包含頭文件vector

7.在很多編譯器中,對於main()的定義多爲int main(),而不是void main()

8.char類型事實上可以看做整數操作,範圍是-128~127。而''(單引號)可以把裏面的字符轉化爲對應的ASCII碼。既然可以看作整數,那麼for(char i=0;i<100;i++);也是合法的操作;int佔4字節,short佔2字節,char佔一字節,掌握這個後,就可以嘗試區優化程序的結構。

比如:char ch='5';//這句話把5對應的ASCII 碼賦值給ch,當你用“”是便會出錯,因爲雙引號引起的是字符串。

9.c/c++中數組的名稱代表的是該數組第一個元素指向的地址,也就是這個數組的開始地址;例如int num[20];//其中num指向的是num[0]對應的地址,num==&num[0];當定義一個指針時,你也可以向數組那樣操作它,例如char* ch;//ch[0]=*ch,ch[1]就是*ch之後的地址對應的值;關於指針的說明在下面

10.指針:舉例來說char* ch;//這句話定義了一個名稱爲ch的指針,ch的值是一個地址,*ch的值是該地址對應的值;“*”又叫解除引用符號;如果要給它賦值,可以這樣:char b=20;ch=&b;或者把一個數組賦給一個指針char b[20]="zxcvbnm";ch=b;基於這樣的使用,我們就可以讓自定義的函數返回一個數組的指針,例如:

int* function()
{
int* num=new int(3);
num[0]=20;
num[1]=30;
num[2]=40;
return num;
}
11.關於for循環的使用:典型的用法是for(int i=0;i<20;i++){}//循環體如果只有一條語句,則可以省略{};否則必須加上{}。因此,對於循環嵌套可以是:

for(i=0;i<20;i++)
for(j=0j<20;j++){}
上面的代碼中將會執行400次循環。
當你要依次輸出用vector定義的數組時可以這樣:

vector<int>num(20);
for(int it=num.begin();it!=num.end();it++)
cout<<*it;
12.三目運算符(?:),可以把if(){}else{}語句簡單化,例如if(20>30){cout<<"20>30"}else{cout<<"30>20"}可以寫成20>30?cout<<"20>30":cout<<"30>20"

13.預編譯:#define的作用是在編譯時替換文本;類似於定義常量,例如:#define pi 3.1415926535 //定義了圓周率pi;

但切記,#define只是單純的文本替換,並非正式的執行語句。

舉例:

#define max(a,b) a>b?a:b
這段代碼定義了一個可以比較出最大值的函數max().

另外,還有條件編譯指令(#if、#elif、#else、 #endif),常見用法如下:

#ifdef(fun1)//如果已經有宏定義fun1,則
//代碼
#elif(fun2)//否則如果有宏定義fun2,則
//代碼
#else//否則
//代碼
#endif
使用#if可以避免重複定義。

還有#pragma、#program等指令,具體參見百科

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章