一些易錯的題目及擴充問題 書沒看完,陸續更新

2021-06-23 03:50:51 字數 4359 閱讀 3634

//摘自某書

//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 注 單引號中輸出的內容是 所見即所得 的,無論有無變數,都...