玩具俠 C語言學習之程式執行及記憶體儲存(1)

2021-07-10 06:23:01 字數 1962 閱讀 3556

本人是一名賣玩具**賣家,空餘時間喜歡看看程式設計方面技術,現在有個理想就是希望能成為一名黑客,

都說c語言是程式設計的基礎,今天我就開始記錄學習c語言的筆記,堅信滴水可穿石,慢慢積累,日後定會有質的變化,希望和大家一同學習,共同見證奇蹟的時刻。

學習內容:

1、程式是怎麼執行的?

2、記憶體是怎麼儲存資料的?

1、程式是怎麼執行的? 

我們用程式語言編寫的程式是怎麼執行的呢,其實很難解釋清楚,太複雜,說個大概的理解,當我們要執行某個程式的時候,

需要把這個程式轉換成機器語言010101010,計算機只能識別01010101的機器語言,轉換過程通常由作業系統的編譯器和彙編器

進行轉換,轉完後在由作業系統將010101載入到記憶體裡形成乙個獨自執行的程式即程序,這段程式(程序)需要作業系統將它排程

到cpu晶元上執行才算是真正的執行,最後cpu上執行的程式010101(程序)需要轉換成乙個個高低電壓或者時鐘脈衝,轉換的過程

需要指令集和計算機硬體的支援,最後完成各種操作。

因此在實際編寫程式過程中,基本上都是對記憶體的各種操作,所有的程式指令都會在記憶體中暫時儲存,然後在由cpu去呼叫執

行,因此理解了記憶體是什麼,即可得記憶體者得天下!下面介紹記憶體是什麼玩意?

2、記憶體是怎麼儲存資料的?

從計算機記憶體的角度思考c語言中的一切東東,是挺有幫助的。我們可以把計算機記憶體想象成乙個位元組陣列,記憶體中每乙個位址表示 1 位元組。比方說我們的電腦有 4k 記憶體,那這個記憶體陣列將會有 4096 個元素。當我們談論乙個儲存位址的指標時,就當相於我們在談論乙個儲存著該記憶體陣列某個元素索引的指標。作業系統對記憶體的管理要比較複雜。記憶體不一定連續,也不一定按順序處理。

假設我們的計算機有 4k 的記憶體,下乙個開放位址的索引是2048。我們宣告乙個新的字元變數i='a'。當該變數所獲得的記憶體放置了它的值,變數的名字也與記憶體中的該位置關聯,我們的字元i就獲得了乙個儲存在2048位置的值。該字元是單位元組的因此它只占用了索引為 2048 的位置。如果我們對 i 變數使用位址操作符(&),它將返回到索引為2048的位置。如果這個變數是另一種型別,比如是 int,它將占用4位元組,在陣列中占用索引為 2048-2051 的位置。使用位址操作符仍將返回索引2048的位置,因為 int 型即便占用了 4 位元組,但它開始於 2048 位置

。為了說清楚什麼是指標,必須弄清楚資料在記憶體中是如何儲存的,又是如何讀取的。 如果在程式中定義了乙個變數,在編譯時就給這個變數分配記憶體單元。系統根據程式中定義的變數型別,分配一定長度的空間。例如,c++編譯系統一般為整型變數分配4個位元組,為單精度浮點型變數分配4個位元組,為字元型變數分配1個位元組。記憶體區的每乙個位元組有乙個編號,這圖6.1就是「位址」。 

請務必弄清楚乙個記憶體單元的位址與記憶體單元的內容這兩個概念的區別。在程式中一般是通過變數名來對記憶體單元進行訪問操作的。其實程式經過編譯以後已經將變數名轉換為變數的位址,對變數值的訪問都是通過位址進行的。這種按變數位址訪問變數值的方式稱為直接訪問方式,或直接訪問方式。 還可以採用另一種稱為間接訪問(間接訪問)的方式。可以在程式中定義這樣一種特殊的變數,它是專門用來存放位址的。 圖6.2是直接訪問和間接訪問的示意圖。為了將數值3送到變數中,可以有兩種方法: (1) 直接將數3送到整型變數i所標識的單元中。見圖6.2(a)。 (2) 將3送到指標變數i_pointer所指向的單元(這就是變數i所標識的單元)中。見圖6.2(b)。 所謂指向,就是通過位址來體現的。 由於通過位址能找到所需的變數單元,因此可以說,位址指向該變數單元。因此將位址形象化地稱為「指標」。乙個變數的位址稱為該變數的指標。 如果有乙個變數是專門用來存放另一變數位址(即指標)的,則它稱為指標變數。指標變數的值(即指標變數中存放的值)是位址(即指標)。

記憶體有很多儲存單元組成,儲存單元一般應具有儲存資料和讀寫資料的功能,一般以8位二進位製作為乙個儲存單元,也就是乙個位元組。每個單元有乙個位址,是乙個整數編碼,可以表示為二進位制整數。程式中的變數和主儲存器的儲存單元相對應。變數的名字對應著儲存單元的位址,變數內容對應著單元所儲存的資料

C語言學習大程式

大程式 一.多個.c檔案 main 裡的 太長了適合分成幾個函式 乙個源 檔案太長了適合分成幾個 檔案 兩個獨立的源 檔案不能編譯形成可執行的程式 二.編譯單元 乙個.c檔案是乙個編譯單元 編譯器每次編譯只處理乙個編譯單元 三.專案 在dev c 中新建乙個專案,然後把幾個源 檔案加入進去 對於專案...

C語言學習筆記之程式結構

1.定義在函式外部的變數就叫全域性變數 2.全域性變數具有全域性的生存期和作用域 3.它們與任何函式都無關 4.在任何函式內部都可以使用它們 全域性變數初始化 1.沒有做初始化的全域性變數會得到0值 2.指標會得到null值 3.只能用編譯時刻已知的值來初始化全域性變數 不能實現 int a 10 ...

C語言學習筆記之 程式流程結構

語法 goto 標籤 例 define crt secure no warnings include include int main 執行結果 開始 goto a標籤 此時程式的流程如下 也就是直接跳過goto下面的 直接執行標籤a下面的 一般不建議使用 goto語句,因為這會使程式的結構混亂 語...