第28節:什麼是變數
變數是什麼?在程式的程序中需要儲存一些資料。大家之前學彙編的時候知道了,儲存資料可以存到cpu中也就是存在暫存器裡也可以存在記憶體中。但是在c語言中儲存資料的時候我們要把這個資料儲存到**呢?在c語言裡所為的變數就是乙個容器,也就是一塊記憶體。
1、宣告變數
變數型別 變數名
變數型別 用來說明寬度是多大
int 4個位元組
short 2個位元組
char 1個位元組
例子1:
#include
int x; //宣告變數
void main()
變數名的命名規則:
1、只能以字母、數字、下劃線組成且第1個字母必須字母下劃線
2、區分大小寫
3、不能使用c語言的關鍵字
以上的例子就是全域性變數的例子,全域性變數的特點:在函式裡可以賦值,如:例子中的x = 1。全域性變數是宣告的時候沒有放到函式裡面,但是它有乙個獨一無二的記憶體編號。當x = 1時轉換成彙編**如下:
5: void main()
00401032 pop edi
00401033 pop esi
00401034 pop ebx
00401035 mov esp,ebp
00401037 pop ebp
00401038 ret
以上的彙編**不是標準的彙編**,這個彙編**只是能容易讀懂。
從以上的彙編**我們很容易理解什麼是函式,什麼是變數名,實際上就是乙個記憶體位址的編號,在這裡x= 00427e44,就是乙個記憶體編號,那麼這塊記憶體有多大呢?這塊記憶體是4個位元組(dwrod),在c語言中int就是對應著dword。可以簡單的說變數就是容器,變數型別確定了變數的寬度,變數名就是記憶體的編號,所以有了彙編的底子看這種**非常簡單:
例子2:
#include
#include
int plus()
return 0;
}void main()
以上是區域性變數,區域性變數和全域性變數差別在於,區域性變數在函式裡面,函式用了才有值,函式不用沒有值,而且它的位址沒有辦法確定,我們根本不知道值是多少,什麼時候被函式呼叫。區域性變數的值一旦執行完畢後就消失了,請看如下區域性變數彙編**:
6: int x;
7:8: x = 1234567;
00401038 mov dword ptr [ebp-4],12d687h
9: while(1)
0040103f mov eax,1
00401044 test eax,eax
00401046 je plus+3eh (0040105e)
10:
0040105c jmp plus+1fh (0040103f)
13: return 0;
0040105e xor eax,eax
14: }
00401060 pop edi
00401061 pop esi
00401062 pop ebx
00401063 add esp,44h
00401066 cmp ebp,esp
00401068 call __chkesp (004010d0)
0040106d mov esp,ebp
0040106f pop ebp
00401070 ret
16: void main()
17:
004010ad pop edi
004010ae pop esi
004010af pop ebx
004010b0 add esp,40h
004010b3 cmp ebp,esp
004010b5 call __chkesp (004010d0)
004010ba mov esp,ebp
004010bc pop ebp
004010bd ret
前端學習Day28
一 補充 1.js中的三大特殊資料 undefined,null,nan nan 非法的數值運算得到的結果 特殊之處 1.是乙個數值型的資料,但是不是乙個數字 2.nan不等於任何值,和任何資料都不相等,nan不等於nan 檢測方法 isnan 要檢測的資料 true 檢測結果為 nan 或能轉成 ...
程序課堂小結day28
粘包問題 無法確認傳送資料的大小。短時間內傳送多次資料量小並且間隔時間短的資料會一次性打包傳送。struct 可以將乙個很長的資料,壓縮成固定的長度,比如4.解決粘包問題 通過struct模組弄乙個報頭。可以把字典壓縮成乙個報頭,傳送給服務端。服務端接收到報頭後解壓縮,獲取真實字典資料長度。接收字典...
day28 物件列舉
var obj for var prop in obj 如果用obj.prop的形式訪問,相當於訪問obj prop 系統把這個prop當成屬性而不是變數。所有繼承了 object.prototype 的物件都會從原型鏈上繼承到 hasownproperty 方法,使用 hasownproperty...