C語言再學習1 定義變數

2021-08-28 06:22:55 字數 2018 閱讀 3512

變數**於數學,是計算機語言中能儲存計算結果或能表示值抽象概念。變數可以通過變數名訪問。在指令式語言中,變數通常是可變的

int         x      =     10;

變數型別 變數名 = 變數值;

char

8bit

1位元組short

16bit

2位元組int

32bit

4位元組log

32bit

4位元組當我們在c語言裡建立乙個變數的時候

int x = 5;

int y = 6;

00c517b8 mov dword ptr [x],5

00c517bf mov dword ptr [y],6

實際上在彙編層面,我們通過mov指令把變數的值放到x的位置

printf("%x",&x);       //0xdca034

我們的**實際上是

mov dword ptr[0xdca034],5

如何證實這個彙編**就是我們的定義變數?

我們先在全域性變數定義乙個x=5

int x = 5;

然後列印一次x的值

printf("%x\n", x); //5

然後我們通過彙編指令mov來修改x的值

當我們定義乙個變數的時候

實際上就是使用彙編指令

當我們使用mov指令內聯彙編強行修改x的變數是成功的,說明int x=5,和我們的彙編是乙個作用

mov dword ptr ds:[x],5 int x=5;

mov dword ptr ds:[x],0x12345678 x=0x12345678;

上**

#include "pch.h"

#include int x = 5;

int main()

printf("%x\n", x);

}

反彙編

#include "pch.h"

#include int x = 5;

int main()

printf("%x\n", x);

00ec421c mov eax,dword ptr [x (0eca014h)]

00ec4221 push eax

00ec4222 push offset string "%x\n" (0ec7bcch)

00ec4227 call _printf (0ec1375h)

00ec422c add esp,8

}00ec422f pop edi

00ec4230 pop esi

00ec4231 pop ebx

00ec4232 add esp,0c0h

00ec4238 cmp ebp,esp

00ec423a call __rtc_checkesp (0ec1212h)

00ec423f mov esp,ebp

00ec4241 pop ebp

00ec4242 ret

C語言再學習 宣告與定義

什麼是定義?什麼是宣告?它們有何區別?舉個例子 a int i b extern int i 關於 extern,後面解釋 哪個是定義?哪個是宣告?或者都是定義或者都是宣告?我所教過的學生幾乎沒有一 人能回答上這個問題。這個十分重要的概念在大學裡從來沒有被提起過!什麼是定義 所謂的定義就是 編譯器 ...

C語言再學習 函式

一 函式概述 1 首先什麼是函式?函式是用於完成特定任務的程式 的自包含單元。2 為什麼使用函式?第 一 函式的使用可以身故重複 的編寫。第 二 函式使得程式更加模組化,有利於程式的閱讀修改和完善。3 main函式原型 int main int argc,char argv,char envp 第乙...

c語言 再學習筆記

簡單的來說 在區域性變數前加上 static 可以延長他的生命週期 由 函式呼叫時 延長至 程式存活週期 在全域性變數前加上static 可以減小它的作用域 由 多檔案可見,減小到單檔案內 可見 局變數的說明之前再加以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性...