//摘自某書
//p33
#include int main(int argc,char *argv)
; int *ptr=arr;
*(ptr++)+=123;
printf("%d,%d\n",*ptr,*(++ptr));
}printf("%d,%d\n",*ptr,*(++ptr));
00a613e7 mov eax,dword ptr [ebp-30h]
00a613ea add eax,4 //先計算++ptr,ptr指向8
00a613ed mov dword ptr [ebp-30h],eax
00a613f0 mov esi,esp
00a613f2 mov ecx,dword ptr [ebp-30h]
00a613f5 mov edx,dword ptr [ecx]
00a613f7 push edx
00a613f8 mov eax,dword ptr [ebp-30h]
00a613fb mov ecx,dword ptr [eax]
00a613fd push ecx
00a613fe push offset string "%d,%d\n" (0a65740h)
00a61403 call dword ptr [__imp__printf (0a682b0h)]
00a61409 add esp,0ch
00a6140c cmp esi,esp
00a6140e call @ilt+295(__rtc_checkesp) (0a6112ch)
printf("%d,%d\n",*ptr,*(ptr++));
013413e7 mov eax,dword ptr [ebp-30h]
013413ea mov ecx,dword ptr [eax]
013413ec mov dword ptr [ebp-0f8h],ecx
013413f2 mov edx,dword ptr [ebp-30h]
013413f5 add edx,4
013413f8 mov dword ptr [ebp-30h],edx
013413fb mov esi,esp
013413fd mov eax,dword ptr [ebp-0f8h]
01341403 push eax
01341404 mov ecx,dword ptr [ebp-30h]
01341407 mov edx,dword ptr [ecx] //儲存的是7
01341409 push edx
0134140a push offset string "%d,%d\n" (13457a8h)
0134140f call dword ptr [__imp__printf (13482b0h)]
01341415 add esp,0ch
01341418 cmp esi,esp
0134141a call @ilt+295(__rtc_checkesp) (134112ch)
*(ptr++)+=123;
011c13d1 mov eax,dword ptr [ebp-30h]
011c13d4 mov ecx,dword ptr [eax]
011c13d6 add ecx,7bh
011c13d9 mov edx,dword ptr [ebp-30h]
011c13dc mov dword ptr [edx],ecx
011c13de mov eax,dword ptr [ebp-30h]
011c13e1 add eax,4
011c13e4 mov dword ptr [ebp-30h],eax
//p34記憶體截斷
#include using namespace std;
int main(int argc,char *argv)
; //access_before(array[5],4,6);//巨集展開後是*&array[5]-4=6;此時*&array[5]為常值6,為不可修改左值,編譯錯誤
//修改:把#define sub(x,y) x-y修改為:#define sub(x,y) (x-y)
for (int i=0;i<10;i++)
;int main(int argc,char *argv)
~a(){}
void fun1()
//p72構造順序問題
#include using namespace std;
class a
;int main(int argc,char *argv)
//p81
控制代碼與指標
控制代碼是乙個32位整數,實際上是window在記憶體中維護的乙個物件(視窗等)記憶體實體地址列表的整數索引
因為window記憶體管理經常會將空閒物件記憶體釋放,當需要的時候再重新提交到物理記憶體,所以物件的實體地址
是變化的,不允許程式直接通過實體地址訪問物件。程式將想訪問物件的控制代碼傳給系統,系統根據控制代碼維護
檢索自己維護的物件列表就能知道知道想訪問的物件的實體地址了。
控制代碼是一種指向指標的指標。
控制代碼位址(穩定)->記錄物件在記憶體中的位址->物件在記憶體中的位址(不穩定)->實際物件
conclusion:
控制代碼和指標其實是兩個截然不同的概念,window系統用控制代碼標記系統資源,隱藏系統資訊。指標則是標記某個物理記憶體位址
//p90.非遞迴實現f(m,n)=f(m-1,n)+f(m,n-1),m>1,n>1
//類似於揹包問題
#include using namespace std;
//遞迴
int f_recursion(int m,int n)
else if (n==1)
else }
//非遞迴矩陣
int f_not_recursion(int m,int n)
;string lessthantwo::msg="num is less than 2";
bool judge(int num)
else
}if (j>sqrt(double(i)))
;cdemo(const cdemo& copy)//定義拷貝建構函式
~cdemo()
}char *str;
protected:
private:
};int main(int argc,char *argv)
//虛析構函式問題
#include using namespace std;
class base
/*引申:
1.建構函式不能為virtual型。
虛函式採用一種虛呼叫的方法,虛呼叫是一種可以在只有部分資訊情況下工作的機制,特別允許我們呼叫乙個只知道
介面而不知道其準確物件型別的函式。但是如果要建立乙個物件,必須知道物件的準確型別,因而建構函式不能為虛的。
*/
//p119 常考:建構函式,析構函式,拷貝建構函式,賦值函式
#include using namespace std;
class string
else
}~string() }
string(const string& copy)//複製建構函式
string& operator=(const string& other)
else
}friend ostream& operator<<(ostream&os,const string &str)
{ os<
php的一些易錯點
1.單引號與雙引號的區別 一般用單引號或雙引號標識乙個字串。單引號串與雙引號串,在php中的處理是不同的。雙引號中的內容可以被解釋並被替換,單引號串中的內容則被作為普通字元處理。例如 注 單引號中輸出的內容是 所見即所得 的,無論有無變數,都被當做普通字元原樣輸出。說明 在定義簡單的字串時,使用單引...
Python一些易錯的點
1.int float 這些不是真正意義上的函式,而是建立物件的構造方法,也不是c 語言中的強制型別轉換。2.python函式中的可變引數有兩種,一種是加 一種是加上兩個 前者是解包元祖,後者是解包字典。傳入的時候要注意使用 和 def a arg print arg if name main ar...
php的一些易錯點
一般用單引號或雙引號標識乙個字串。單引號串與雙引號串,在php中的處理是不同的。雙引號中的內容可以被解釋並被替換,單引號串中的內容則被作為普通字元處理。例如 str 6 echo str is str n echo str is str n 注 單引號中輸出的內容是 所見即所得 的,無論有無變數,都...