day28 什麼是變數

2021-08-15 17:30:09 字數 2294 閱讀 8206

第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...