<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                本文目錄 - [一、數據的存儲](http://www.cnblogs.com/mjios/archive/2013/05/22/3065522.html#label0) - [二、數據類型](http://www.cnblogs.com/mjios/archive/2013/05/22/3065522.html#label1) - [三、常量](http://www.cnblogs.com/mjios/archive/2013/05/22/3065522.html#label2) - [三、變量](http://www.cnblogs.com/mjios/archive/2013/05/22/3065522.html#label3) 在我們使用計算機的過程中,會接觸到各種各樣的數據,有文檔數據、圖片數據、視頻數據,還有聊QQ時產生的文字數據、用迅雷下載的文件數據等。這講我們就來介紹C語言中數據的處理。 [回到頂部](http://www.cnblogs.com/mjios/archive/2013/05/22/3065522.html#labelTop) ##一、數據的存儲 ### 1.數據類型 首先來看看計算機是怎么存儲數據的。總的來說,計算機中存儲的數據可以分為兩種:靜態數據和動態數據。 1,靜態數據 概念:靜態數據是指一些永久性的數據,一般存儲在硬盤中。硬盤的存儲空間一般都比較大,現在普通計算機的硬盤都有500G左右,因此硬盤中可以存放一些比較大的文件。 存儲的時長:計算機關閉之后再開啟,這些數據依舊還在,只要你不主動刪掉或者硬盤沒壞,這些數據永遠都在。 哪些是靜態數據:靜態數據一般是以文件的形式存儲在硬盤上,比如文檔、照片、視頻等。 2,動態數據 概念:動態數據指在程序運行過程中,動態產生的臨時數據,一般存儲在內存中。內存的存儲空間一般都比較小,現在普通計算機的內存只有4G左右,因此要謹慎使用內存,不要占用太多的內存空間。 存儲的時長:計算機關閉之后,這些臨時數據就會被清除。 哪些是動態數據:當運行某個程序(軟件)時,整個程序就會被加載到內存中,在程序運行過程中,會產生各種各樣的臨時數據,這些臨時數據都是存儲在內存中的。當程序停止運行或者計算機被強制關閉時,這個程序產生的所有臨時數據都會被清除。 你可能會問:既然硬盤的存儲空間這么大,為何不把所有的應用程序加載到硬盤中去執行呢?有個主要原因是內存的訪問速度比硬盤快N倍。 3,動態數據和靜態數據的轉換 硬盤和內存是計算機使用最頻繁的兩個硬件,它們之間的數據經常要進行轉換。 比如,硬盤上有個叫做“C語言.mp4”的視頻文件,現在要使用暴風影音來播放 ![](https://box.kancloud.cn/2016-05-07_572d604851b24.png) 首先打開暴風影音軟件,計算機會將暴風影音加載到內存中,緊接著計算機會讀取硬盤中視頻文件的內容到內存中。暴風影音會解析讀取到的文件內容,以視頻的形式呈現給用戶看。這就完成了一個由靜態數據到動態數據的轉換。 再比如,你使用迅雷從網上下載一個叫做“C語言.mp4”的視頻文件 ![](https://box.kancloud.cn/2016-05-07_572d60486b792.png) 首先打開迅雷軟件,計算機會將迅雷加載到內存中,緊接著迅雷就會從互聯網下載視頻文件。大家都知道,這個下載過程肯定是要耗點時間的,主要受文件大小和下載速度的影響。每個時間段內下載獲取的數據都是先放到內存中,然后再寫入到硬盤中。所有數據下載完畢后,硬盤中就會有一個完整的視頻文件。這就完成了動態數據到靜態數據的轉換。 ### 2.存儲形式 1,二進制存儲 在[前面的文章](http://www.cnblogs.com/mjios/archive/2013/05/03/3052593.html#label0)中說過,計算機只能識別0和1。因此,前面所說的靜態數據和動態數據,都是以0和1的形式存儲的,這種存儲方式稱為“二進制存儲”。有人可能覺得很詫異,只是0和1怎么可能表示這多的數據呢?沒錯,如果只是一位數字的話,只能表示2種數據:要么是0,要么是1。但是如果有多位數字的話,那情況就不一樣了。如果有2位數字,那么就能表示4種數據:00、01、10、11;如果有3位數字呢,就能表示8種數據;以此類推,如果有n位數字,就能表示2的n次方種數據。可以發現,只要位數足夠,0和1所能表示的數據是非常龐大的。 2,比特位和字節 * 平時我們在計算機上看到的MP4、MP3、照片等文件,都是由0和1組合成的,只不過計算機解析了這些0和1,以圖形界面的形式呈現在我們眼前。文件越大,所包含的0和1就越多,為了方便計算文件大小,對計量單位做了個規定:1個二進制位為1bit,也就是1個0或1就為1bit,bit的中文翻譯是“比特位”;8個二進制位為1byte,也就是8個0或1就為1byte,1byte=8bit,byte的中文翻譯是“字節”。平時我們所說的某個文件大小為64B,就是64字節的意思,內部包含了64x8個0和1。 * 還有一些需要了解的計量單位: 1 KB = 1024 B,1 MB = 1024 KB,1 GB = 1024 MB,1 TB = 1024 GB * 在Mac上查看某個mp4文件的大小: ![](https://box.kancloud.cn/2016-05-07_572d60488e76e.png) 26.2 MB = 26.2 x 1024 KB = 26.2 x 1024 x 1024 B(字節) [回到頂部](http://www.cnblogs.com/mjios/archive/2013/05/22/3065522.html#labelTop) ##二、數據類型 作為程序員,最關心的肯定是內存中的動態數據,因為我們寫的程序就是運行在內存中的。程序在運行過程中,會產生各種各樣的動態臨時數據,為了方便數據的運算和操作,C語言對這些數據進行了分類,提供了豐富的數據類型。大致如下圖所示: ![](https://box.kancloud.cn/2016-05-07_572d6048ab3a9.png) * 在圖中眾多數據類型中,最常用的是4種基本數據類型:char、int、float、double,而最重要的是指針類型,指針使用得當的話,不僅可以節省代碼量,還可以優化內存管理、提高性能。因此,指針是一個非常重要的概念,必須重視。如果你說C語言中除了指針,其他都學得挺好的,那你干脆說你沒學過C語言。 * 這些豐富的數據在C語言中可以用常量或者變量來表示。接下來就介紹一下常量和變量的使用。 [回到頂部](http://www.cnblogs.com/mjios/archive/2013/05/22/3065522.html#labelTop) ##三、常量 ### 1.什么是常量 "量"表示數據。常量,則表示一些固定的數據,也就是不能改變的數據。 ### 2.常量的類型 在C語言中,常量大致可以分為以下類型: 1,整型常量(int) 其實就是int類型的數據,包括了所有的整數,比如6、27、109、256、-10、0、-289等 2,浮點型常量(float\double) 浮點型常量分為double和float兩種數據類型 - double:雙精度浮點型,其實就是小數。比如5.43、-2.3、0.0等,注意,0.0也算是個小數。 - float:單精度浮點型,也是小數,比double的精確程度低,也就是說所能表示的小數位數比較少。為了跟double區分開來,float型數據都是以f結尾的,比如5.43f、-2.3f、0.0f。需要注意的是,絕對不能有10f這樣格式的,編譯器會直接報錯,只有小數才允許加上f。 3,字符常量(char) - 將一個數字(0~9)、英文字母(a~z、A~Z)或者 其他符號(+、-、!、?等)用單引號括起來,這樣構成的就是字符常量。比如'6'、'a'、'F'、'+'、'$'等。 - 注意:單引號只能括住1個字符,而且不能是中文字符,下面的寫法是錯誤的:'abc'、'123456'、'男' 4,字符串常量 - 將一個或者多個字符用雙引號("")括起來,這樣構成的就是字符串常量。比如"6"、"男"、"哇哈哈"、"abcd"、"my_car4",其實printf("Hello World");語句中的"Hello World"就是字符串常量。 - 那究竟6、'6'、"6"在用法上有什么區別呢?這個先不作討論,以后會介紹。 [回到頂部](http://www.cnblogs.com/mjios/archive/2013/05/22/3065522.html#labelTop) ##三、變量 ### 1.什么是變量 常量表示的數據是不可以改的,而用變量表示的數據是可以經常修改的。比如游戲中主角的生命值就可以用一個變量來表示,主角受到傷害后,生命值就會減少,主角接受治療后,生命值就會增多,在游戲過程中,主角的生命值一直都在改變,因此主角的生命值應該用一個變量來表示。總結一句話:當一個數據的值需要經常改變或者不確定時,就應該用變量來表示。 ### 2.變量的定義 任何變量在使用之前,必須先進行定義。定義變量的目的是:在內存中分配一塊存儲空間給變量,方便以后存儲數據。如果定義了多個變量,就會為這多個變量分別分配不同的存儲空間。 1,變量類型 * 計算機的內存是有限的,現在普通計算機的內存有4G,那么定義一個變量的時候分配多少存儲空間給這個變量呢?是4G全部給它么?這很顯然不可能,如果把4G的存儲空間全部給了這個變量,那就意味著不能再分配空間給其他變量,而且系統也會癱瘓,因為內存不夠用了,無法再運行其他程序。因此,我們在定義變量的時候,需要指明變量類型,系統會根據變量類型來分配相應的存儲空間。不同數據類型所占用的存儲空間是不一樣的,如果是字符型(char)變量,就分配1個字節的存儲空間;如果是整型(int)變量,就分配4個字節的存儲空間。 * 變量類型的還一個作用是用來約束變量所存放數據的類型。一旦給變量指明了類型,那么這個變量就只能存儲這種類型的數據,比如整型(int)變量只能存儲整型數據,不能存儲浮點型數據。 2,變量名 在程序運行過程,肯定會定義大量的變量,每個變量都有自己的存儲空間。那怎么區分這些變量呢?怎么找到變量對應的存儲空間呢?為了區分這些變量,定義變量的時候應該為每個變量指定一個變量名,變量名也是[標識符](http://www.cnblogs.com/mjios/archive/2013/05/07/3064469.html#label1)的一種。當我們要修改變量的數據時,系統會根據變量名找到變量對應的存儲空間,將存儲空間里面的數據改掉。 3,定義 總結可得,定義變量需要2個條件:變量類型、變量名。定義變量的格式為:變量類型? 變量名; ~~~ int main() { int i; char c; return 0; } ~~~ 由于C程序的入口是main函數,因此暫時把定義變量的代碼都寫在了main函數中。在第3行定義了一個名字為i的整型變量,說明i只能存儲整型數據;在第5行定義了一個名字為c的字符型變量,說明c只能存儲字符型數據。第3、5、7行的代碼都稱為“語句”,每條語句后面都有個分號;。 于是,系統就會在內存中分別為變量i、c分配一定的存儲空間,如下圖所示,i和c各占用一塊存儲空間。至于究竟占用多少字節的存儲空間呢,暫時不用去研究,后面會介紹。 ![](https://box.kancloud.cn/2016-05-07_572d6048c6dda.png) 如果是同一種類型的變量,可以連續定義,變量名之間用逗號,隔開。格式為:變量類型? 變量名1,?變量名2,?變量名3, ...?; ~~~ int main() { int a, c; return 0; } ~~~ 第3行代碼的意思是定義了2個int類型的變量,變量名分別為a、c ### 3.變量的使用 1,先定義,再初始化 前面已經定義了兩個變量,但是這兩個變量并沒有存儲任何值,我們需要給變量進行第一次賦值,也叫做“初始化”。 變量賦值的格式是:變量名 = 值; 這個等號"="是一個賦值運算符,將右邊的值賦值給左邊的變量,也就是將右邊的值存儲到左邊變量的存儲空間中。 ~~~ int main() { int i; i = 10; char c; c = 'A'; return 0; } ~~~ 在第4行給變量i賦值一個整型常量10,在第7行給變量c賦值一個字符型常量'A'。像第4、7行這樣的賦值操作,稱為“賦值運算”。 內存中大致如下圖所示,整數10存儲在i的存儲空間中,字母A存儲在c的存儲空間中。 (其實我這個圖并不是很準確,因為內存中的所有數據都是以0和1的形式存儲的,比如10,它會存儲成1010;字母A,它會存儲成1000001。這里為了達到直觀的效果,就沒有寫成二進制形式) ![](https://box.kancloud.cn/2016-05-07_572d6048df5e5.png) 2,定義的同時初始化 上面的代碼也可以寫成下面這樣,在定義變量的同時進行初始化:變量類型? 變量名?= 值; ~~~ int main() { int i = 10; float f = 10.9f; double d = 9.8; return 0; } ~~~ ![](https://box.kancloud.cn/2016-05-07_572d6049018a7.png) 3,可以不斷修改 既然i是個變量,說明它的值可以不斷地改變,看下面的代碼 ~~~ int main() { int i = 10; i = 89; char c = 'A'; return 0; } ~~~ 在第3行定義了變量i,并且初始值為10。緊接著在第5行把i的值改為89,這個89會覆蓋以前存儲的10,內存中大致如下圖所示 ![](https://box.kancloud.cn/2016-05-07_572d604916c48.png) 4,const關鍵字 剛才提到,默認情況下,變量的值是可以不斷改變的。不過,有時候我們會希望變量的值只在定義的時候初始化一次,以后都不能再改變,這個時候我們就可以使用const關鍵字來修飾變量。 ~~~ int main() { const int i = 10; i = 11; return 0; } ~~~ 注意第3行,在int的前面加了個const關鍵字。表示變量i的值只會初始化一次,也就是說i的值永遠都是一開始的10,以后都不能再改了。所以編譯器會報第5行代碼的錯誤,不允許再次修改i的值。 ### 4.變量的使用注意 1,不能重復定義同一個變量 下面的代碼是錯誤的 ~~~ int main() { int i = 10; int i = 89; return 0; } ~~~ 編譯器會報第5行的錯,錯誤的原因很簡單,第3行和第5行都是定義變量i,因此在內存中會是這樣 ![](https://box.kancloud.cn/2016-05-07_572d604930760.png) 內存中會出現兩塊存儲空間,而且名字都叫i,那如果我想取出變量i的值,那你說計算機取10好還是取89好呢?因此,這種做法肯定是不可以的。 2,可以將一個變量的值賦值給另外一個變量 ~~~ int main() { int i = 10; int a = i; return 0; } ~~~ 在第3行定義了變量i且初始值為10;接著在第5行定義了變量a,并且將變量i的值賦值給了a。在內存中大致如下圖所示: ![](https://box.kancloud.cn/2016-05-07_572d6049468f1.png) 變量i和變量a存儲的值都是10 3,變量的作用范圍(作用域)是從定義變量的那一行代碼開始 下面的代碼是錯誤的 ~~~ int main() { int a = i; int i = 10; int b = i; return 0; } ~~~ 編譯器會報第3行的錯誤,錯誤原因是:標識符i找不到。我們是在第5行定義了變量i,因此變量i從第5行開始才有效,在前面的第3行是無效的。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看