學習筆記壹

很久之前的水货文章了,搬运一下.

C/C++學習筆記:不好取名字,所以用學習筆記代替!

關於main()函數的參數問題

這個問題,是在我將自己電腦的C語言編程環境換成了命令行之後發現的問題(Windows下的命令行版gcc,我也是無語了~)。那就先記一記我的命令行環境的配置吧~

其實最初這個想法是因為受夠了機房無語的環境了,C—free和VC6.0我都是用不慣的,所以我一開始是用的自己的DEV-C,這個軟件真的不是一般的好用,當然咯,這是對於初學者,對於大型程序的開發,它就有點顯得太渣了。但是機房的還原卡會讓我每次使用前進行一次安裝,十分無奈之下,我就想到了為何不配置一個命令行版本的編程環境,靈感來源於java的命令行編程環境。

於是說幹就乾(反正上機課在機房也沒事做),於是我就從DEV-C里提取出MinGW(複製一下),其實DEV-C也用的MinGW這個我早就知道了。然後將MinGW文件夾放到D盤根目錄下(機房還原卡只還原C盤),然後在我的電腦的高級設置里面的環境變量里面Path項里面加上一句D:/MinGW/bin;就可以了。其實醬紫命令行環境就配置好了!!

然後調用windows的cmd.exe我的辦法是從system32文件夾裡複製一個到自己的編程目錄下,醬紫就很方便了。然後就是用記事本(Notepad.exe)(也是windows自帶的)寫代碼,然後用gcc命令編譯,用gdb調試。感覺真的不錯哦~

現在我又在我的電腦上裝了個VIM,正在學習使用VIM,雖然還只是學了個皮毛,不過趕腳這個編輯器真的不錯!!!即使是在windows這個坑爹的平台下!!

具體的編譯命令是醬紫的(以test.c)為栗子:gcc –otest test.c,這樣就可以將一個.c文件編譯成.exe文件了,但是,也可以直接gcc test.c不過這個是默認的模式,其實這個命令我也是在百度學的(百度真的是個神器)。這樣,然後問題就來了,作為一個程序,gcc後面的參數是怎麼來的?

我深入探究這個問題,發現其實我以前學的C語言一直陷入了一個誤區。

以前我都是醬紫寫主函數main的:int main(){…..;return 0;}

後來我發現其實return 0可以不寫,編譯器會自動添加的。後買我又發現,不帶參數的main函數應該醬紫寫:int main(void) {}

然後又發現其實我以前寫的無參函數都寫錯了,例如char get(){}其實應該是醬紫寫的char get(void) {},但是為什麼我以前都沒發現這個錯誤呢(其實也不叫錯誤啦~)?因為大家都這麼寫的。。。笑抽~

然後我就發現 其實main函數也是可以帶參數的 真正的main函數的格式int main(int argc,char *argv[]){}

但是這個參數是幹啥子用的呢?具體的描述我還沒想出來,也許是因為學的還不夠深入吧~但是可以通過一個程序來理解~

1
2
3
4
5
6
#include <stdio.h>
int main(intargc,char *argv[]){
for(int i = 0; i < argc; i++)
printf("%s\n",argv[i]);
putchar(10);
}

編譯后運行(命令行下~)這個程序你會發現很神奇~它會將你的輸入分行輸出,例如我們輸入test sdjkfng this is a sb(test後面可以添加用戶的一些命令)

按回車運行之後,命令行下會輸出這樣的結果

1
sdjkfng
this
is
a
sb

test命令後面輸入不同的字符串,就輸出不同的字符,然後,我就理解了~

對於C++學習的一些感想:

前段時間,從圖書館借了一本C++教程,馬基課上無聊了就自學!

新學到的知識:

  • 變量的引用: 引用是C所沒有的,作用是給變量取別名!
  • 引用的聲明格式:類型標識符 & 變量名;
  • 引用的作用: 給變量取別名(本質)
  • 具體用途: 傳遞參數 使用引用函數給賦值表達式做左值(很重要)!

栗子:

1.

int a; int &ra = a;
說明:不能這樣寫 int&ra; ra = a;

2.

int check(int &a,int &b){};
說明:其實這個可以用指針寫,但是醬紫使用引用的話,比指針要方便,因為對於指針變量,每一次需使用或修改變量都要使用*進行取值運算,但是引用不需要,它可以直接使用,然後就是,使用指針的話,其實還是申請了新的變量,這還是需要內存空間的,但是引用是不需要申請新的內存空間的,本質上并沒有產生新的變量!

3.

1
2
3
4
5
6
7
8
int a[10],error = -1;
int &put(int);
put(9) = 1299; //a[9] = 1299;
put(10) = 12; //error = 12;
int &put(int n){
if(n>0&& n<10) return a[n];
else returnerror;
}

說明:使用引用定義函數時,不能返回局部變量,具體原因很簡單:因為退出函數時,局部變量會被釋放。這個功能真的很墻大!!!


接下來就是關於C++的墻大的面向對象的所謂的”對象”的東西;
由於這部分內容真的很難,所以儘管看了很多遍書,但還是有很多的不懂!

C++的對象由類(class)來實現:
栗子:

1
2
3
4
5
6
7
8
class clock{
private:
int hour,minute,seconds;
public:
set(int h, int m,int s);
protected:
char *Name;
}

說明:這是一個類的具體的定義,class之內的部分叫做類的成員,成員分為三種類型,private,public,protected,其中,private的私有成員只能被類之內的操作訪問和修改,而public的公有成員是對外的接口,protected只能被該類內的和該類的子類的操作訪問;

然後還有什麼構造函數,析構函數,構造拷貝什麼的太難了!!這次學習筆記就這麼多吧~