您好,登錄后才能下訂單哦!
在《二進制思惟以及數據的存儲》一節中講到:
盤算機要處置的數據(諸如數字、文字、符號、圖形、音頻、視頻等)是以二進制的方式寄存在內存中的;
我們將8個比特(Bit)稱為一個字節(Byte),并將字節作為最小的可操作單位。
我們無妨先從最復雜的整數說起,看看它是若何放到內存中去的。
理想生涯中我們會找一個小箱子來寄存物品,一來顯得不那么混亂,二來便利今后找到。盤算機也是這個事理,我們需求先在內存中找一塊區域,規則用它來寄存整數,并起一個好記的名字,便利今后查找。這塊區域就是“小箱子”,我們可以把整數放出來了。
C言語中如許在內存中找一塊區域:
int a;
int又是一個新單詞,它是 Integer 的簡寫,意思是整數。a 是我們給這塊區域起的名字;當然也可以叫其他名字,例如 abc、mn123 等。
這個語句的意思是:在內存中找一塊區域,定名為 a,用它來寄存整數。
留意 int 和 a 之間是有空格的,它們是兩個詞。也留意最初的分號,int a表達了完好的意思,是一個語句,要用分號來完畢。
不外int a;僅僅是在內存中找了一塊可以保管整數的區域,那么若何將 123、100、999 如許的數字放出來呢?
C言語中如許向內存中放整數:
a=123;
=是一個新符號,它在數學中叫“等于號”,例如 1+2=3,但在C言語中,這個進程叫做賦值(Assign)。賦值是指把數據放到內存的進程。
把下面的兩個語句連起來:
int a; a=123;
就把 123 放到了一塊叫做 a 的內存區域。你也可以寫成一個語句:
int a=123;
a 中的整數不是原封不動的,只需我們需求,隨時可以更改。更改的方法就是再次賦值,例如:
int a=123; a=1000; a=9999;
第二次賦值,會把第一次的數據掩蓋(擦除)失落,也就是說,a 中最初的值是9999,123、1000 曾經不存在了,再也找不回來了。
由于 a 的值可以改動,所以我們給它起了一個抽象的名字,叫做變量(Variable)。
int a;發明了一個變量 a,我們把這個進程叫做變量界說。a=123;把 123 交給了變量 a,我們把這個進程叫做給變量賦值;又由于是第一次賦值,也稱變量的初始化,或許賦初值。
你可以先界說變量,再初始化,例如:
int abc; abc=999;
也可以在界說的同時停止初始化,例如:
int abc=999;
這兩種方法是等價的。
在VC或VS下,變量界說要放在函數的掃尾;也就是說,在界說變量之前不克不及有其他代碼。而在 GCC、Xcode 下,或許在運用了 GCC 編譯器的 C-Free、Dev C++、Code::Blocks 下,變量界說可以放在函數的恣意地位。
例如,下面的代碼在 VC、VS、GCC、Xcode 下多是準確的:
#include <stdio.h> int main() { int a = 10; int b = 1000; printf("BianChengBang"); return 0; }
對代碼稍作修正,將 printf 語句放在變量 a、b 兩頭,如下所示:
#include <stdio.h> int main() { int a = 10; printf("BianChengBang"); int b = 1000; //在界說b變量之前有 printf 語句 return 0; }
修正后的代碼在 GCC、Xcode 下是準確的,而在 VC、VS 下就是毛病的。
為什么分歧的編譯器會有分歧的差別呢,基本緣由是什么呢?我們將在《C言語變量的界說地位以及初始值》和《C言語的兩套規范》兩節具體解說。
數據是放在內存中的,變量是給這塊內存起的名字,有了變量就可以找到并運用這份數據。但成績是,該若何運用呢?
我們曉得,諸如數字、文字、符號、圖形、音頻、視頻等數據多是以二進制方式存儲在內存中的,它們并沒有實質上的差別,那么,00010000 該了解為數字16呢,照樣圖像中某個像素的色彩呢,照樣要收回某個聲響呢?假如沒有特殊指明,我們并不曉得。
也就是說,內存中的數據有多種說明方法,運用之前必需要肯定;下面的int a;就標明,這份數據是整數,不克不及了解為像素、聲響等。int 有一個專業的稱謂,叫做數據類型(Data Type)。
望文生義,數據類型用來闡明數據的類型,肯定了數據的說明方法,讓盤算機和程序員不會發生歧義。在C言語中,有多種數據類型,例如:
說 明 | 字符型 | 短整型 | 整型 | 長整型 | 單精度浮點型 | 雙精度浮點型 | 無類型 |
---|---|---|---|---|---|---|---|
數據類型 | char | short | int | long | float | double | void |
這些是最根本的數據類型,是C言語自帶的,假如我們需求,還可以經過它們構成愈加復雜的數據類型,前面我們會逐個解說。
為了讓程序的書寫愈加簡練,C言語支撐多個變量的延續界說,例如:
int a, b, c; float m = 10.9, n = 20.56; char p, q = '@';
延續界說的多個變量以逗號,分隔,而且要具有相反的數據類型;變量可以初始化,也可以不初始化。
所謂數據長度(Length),是指數據占用若干個字節。占用的字節越多,能存儲的數據就越多,關于數字來說,值就會更大,反之能存儲的數據就無限。
多個數據在內存中是延續存儲的,彼此之間沒有分明的界線,假如不明白指明數據的長度,盤算機就不曉得何時存取完畢。例如我們保管了一個整數 1000,它占用4個字節的內存,而讀取時卻以為它占用3個字節或5個字節,這顯然是不準確的。
所以,在界說變量時還要指明數據的長度。而這恰好是數據類型的別的一個感化。數據類型除了指明數據的說明方法,還指清楚明了數據的長度。由于在C言語中,每一種數據類型所占用的字節數多是固定的,曉得了數據類型,也就曉得了數據的長度。
在32位情況中,各類數據類型的長度普通如下:
說 明 | 字符型 | 短整型 | 整型 | 長整型 | 單精度浮點型 | 雙精度浮點型 |
---|---|---|---|---|---|---|
數據類型 | char | short | int | long | float | double |
長 度 | 1 | 2 | 4 | 4 | 4 | 8 |
C言語有若干種數據類型,每種數據類型長度是若干、該若何運用,這是每一位C程序員都必需要控制的,后續我們會逐個解說。
數據是放在內存中的,在內存中存取數據要明白三件工作:數據存儲在哪里、數據的長度以及數據的處置方法。
變量名不只僅是為數據起了一個好記的名字,還通知我們數據存儲在哪里,運用數據時,只需供給變量名即可;而數據類型則指清楚明了數據的長度和處置方法。所以諸如int n;、char c;、float money;如許的方式就肯定了數據在內存中的一切要素。
C言語供給的多種數據類型讓程序愈加靈敏和高效,同時也添加了進修本錢。而有些編程言語,例如PHP、JavaScript等,在界說變量時不需求指明數據類型,編譯器會依據賦值狀況主動推上演數據類型,愈加智能。
除了C言語,Java、C++、C#等在界說變量時也必需指明數據類型,如許的編程言語稱為強類型言語。而PHP、JavaScript等在界說變量時不用指明數據類型,編譯零碎會主動推演,如許的編程言語稱為弱類型言語。
強類型言語一旦肯定了數據類型,就不克不及再賦給其他類型的數據,除非對數據類型停止轉換。弱類型言語沒有這種限制,一個變量,可以先賦給一個整數,然后再賦給一個字符串。
最初需求闡明的是:數據類型只在界說變量時指明,并且必需指明;運用變量時無需再指明,由于此時的數據類型曾經肯定了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。