2013年8月21日 星期三

[C/C++] 近期學習C/C++的一點心得

Pointer
@意義: value/address是每個variable的兩個屬性, variable name代表取value, &取address
@功用: 在pass by value的language中, 可以在function內改變function外變數的值, 類似Java中的呼叫instance method其實已隱含this
@重點: 在於address跟value的變換, 1.透過address(pointer)得到value, 2.透過value得到address
int a=5;
int *ptr=&a;  // init ptr, 指到a

// pointer的操作
*ptr;  //  取a的value
*ptr=7; //  改變a的value

@double pointer:可在function中改變function外pointer的value
int **pp

C/C++的struct跟class
@C struct: 可定義新的type, 但在function call時, 參數傳遞仍為pass by value, 故得傳入pointer才能改變function外面變數的value
@C++ class: 跟C struct相似, 主差別為可讓function成為member及member的access scope; 相同點是在function call時, 預設為pass by value, 所以要改變function外變數的value仍得用pointer,這方面的概念及基礎跟C是相同的

C/C++動態配置memory
@C: 用的是malloc/free
@C++:用的是new/delete
故以下為class variable的動態配置變數obj, 並呼叫其default constructor
Class1 obj =  new Class1();

@constructor為一個function, 意義在於幫剛配置的memory initialize, 概念相同於C中變數宣告時得初始化

結論:
1. C++中pointer的概念及基礎設定與 C 相同
2. 參數傳遞方式基礎相同, struct/class的預設為pass by value
3. struct/class概念相似, 同為新增一個type