你真的理解程式中的變數嗎

2021-07-25 11:28:47 字數 1030 閱讀 5006

關於變數,很多人肯定覺得這有啥可說的,不就是int a=10這類的嗎,這樣的太簡單了,

學習程式語言入門的時候就已經知道了,能沒啥可講的。

可是,你真的理解變數嗎,你知道變數的本質是什麼嗎?

變數的概念 既能讀又能寫的記憶體物件,稱為變數;若一旦初始化後不能修改的物件則稱為常量。

上述概念中說到了記憶體物件,要想真正理解變數就需要從記憶體的角度來理解。

我們來看下面這張圖:

int a;定義了乙個變數a,在我們定義了變數a之後,在記憶體中相應的操作是什麼呢?

從上面的圖我們可以看到定義了乙個a變數,在記憶體中,為a分配了4個位元組的記憶體用於儲存a這個變數的值,同理,double b定義了乙個double型別的b變數,這時,在內種為b變數分配的記憶體空間則是8個位元組。

那我們接下來該談談變數的本質是什麼了。

其實變數只是記憶體空間的乙個標號,相當於乙個門牌號。

我們來看下面這個一段測試程式。

#includeint  main()

我們有以下總結:

程式通過變數來申請和命名記憶體空間 int i = 0

通過變數名訪問記憶體空間

(一段連續)記憶體空間的別名(是乙個門牌號)

改變量有幾種方法?

直接;間接。記憶體有位址編號,拿到位址編號也可以修改記憶體(典型如c中的指標)

變數只是記憶體中的乙個標號,通過變數操作記憶體。

我們要明白,為變數賦值,是向變數所代表的記憶體空間中寫資料,而不是向變數讀寫資料。

那麼接下來你不禁會問變數i存放在哪呢?

這個問題我們首先來看這張圖:

看到這張圖,是不是很熟悉,開始學程式語言的時候都會講這樣堆記憶體,棧記憶體的概念,其實變數i這樣的存放在**區,而變數i所代表的這部分記憶體空間在棧記憶體區域,程式區域性變數一般存放在這個區域。

你真的理解補碼嗎?

計算機數值運算的基礎硬體就是加法器,所以我們就從加法器講起。加法器是計算機數值計算的最基礎硬體單元,加減乘除都是以加法器為基礎實現的。加法器的構成如下圖所示,其中s是和數,c是進製。半加器電路是指對兩個輸入資料位相加,輸出乙個結果位和進製,沒有進製輸入的加法器電路。是實現兩個一位二進位制數的加法運算...

你真的理解 React Hooks 嗎

react hooks 是在 react 16.8 版本新增的特性,在我看了 react 官網 和一些部落格對 react hook 的講解後還是覺得沒有 get 到本質。大部分的 react hook 的講解都是針對於 react hook 的作用 使用規則 定義規則等。對於新手來說還是覺得會使用...

你真的理解大資料嗎?

大資料很火,已然是一種大勢所趨,是雷軍口中的下乙個吹起豬的風口,是劉強東哥倫比亞大學深造回來的第乙個發展物件。大資料牽動著全國精英的心。然而,你真的理解什麼是大資料嗎?就目前來看,對大資料進行解釋的聲音總體分為兩種,一種是大資料資料量級要大,一般可達到pb級別,有了足量的資料之後,根據資料搭建起乙個...