溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

誑言C言語變量和數(shù)據(jù)類型

發(fā)布時(shí)間:2020-07-10 21:14:26 來源:網(wǎng)絡(luò) 閱讀:218 作者:yuw2016 欄目:網(wǎng)絡(luò)安全

在《二進(jìn)制思惟以及數(shù)據(jù)的存儲》一節(jié)中講到:

  • 盤算機(jī)要處置的數(shù)據(jù)(諸如數(shù)字、文字、符號、圖形、音頻、視頻等)是以二進(jìn)制的方式寄存在內(nèi)存中的;

  • 我們將8個(gè)比特(Bit)稱為一個(gè)字節(jié)(Byte),并將字節(jié)作為最小的可操作單位。


我們無妨先從最復(fù)雜的整數(shù)說起,看看它是若何放到內(nèi)存中去的。

變量(Variable)

理想生涯中我們會(huì)找一個(gè)小箱子來寄存物品,一來顯得不那么混亂,二來便利今后找到。盤算機(jī)也是這個(gè)事理,我們需求先在內(nèi)存中找一塊區(qū)域,規(guī)則用它來寄存整數(shù),并起一個(gè)好記的名字,便利今后查找。這塊區(qū)域就是“小箱子”,我們可以把整數(shù)放出來了。
C言語中如許在內(nèi)存中找一塊區(qū)域:

int a;

int又是一個(gè)新單詞,它是 Integer 的簡寫,意思是整數(shù)。a 是我們給這塊區(qū)域起的名字;當(dāng)然也可以叫其他名字,例如 abc、mn123 等。
這個(gè)語句的意思是:在內(nèi)存中找一塊區(qū)域,定名為 a,用它來寄存整數(shù)。

留意 int 和 a 之間是有空格的,它們是兩個(gè)詞。也留意最初的分號,int a表達(dá)了完好的意思,是一個(gè)語句,要用分號來完畢。

不外int a;僅僅是在內(nèi)存中找了一塊可以保管整數(shù)的區(qū)域,那么若何將 123、100、999 如許的數(shù)字放出來呢?
C言語中如許向內(nèi)存中放整數(shù):

a=123;

=是一個(gè)新符號,它在數(shù)學(xué)中叫“等于號”,例如 1+2=3,但在C言語中,這個(gè)進(jìn)程叫做賦值(Assign)。賦值是指把數(shù)據(jù)放到內(nèi)存的進(jìn)程。
把下面的兩個(gè)語句連起來:

int a;
a=123;

就把 123 放到了一塊叫做 a 的內(nèi)存區(qū)域。你也可以寫成一個(gè)語句:

int a=123;

a 中的整數(shù)不是原封不動(dòng)的,只需我們需求,隨時(shí)可以更改。更改的方法就是再次賦值,例如:

int a=123;
a=1000;
a=9999;

第二次賦值,會(huì)把第一次的數(shù)據(jù)掩蓋(擦除)失落,也就是說,a 中最初的值是9999,123、1000 曾經(jīng)不存在了,再也找不回來了。
由于 a 的值可以改動(dòng),所以我們給它起了一個(gè)抽象的名字,叫做變量(Variable)。
int a;發(fā)明了一個(gè)變量 a,我們把這個(gè)進(jìn)程叫做變量界說。a=123;把 123 交給了變量 a,我們把這個(gè)進(jìn)程叫做給變量賦值;又由于是第一次賦值,也稱變量的初始化,或許賦初值。
你可以先界說變量,再初始化,例如:

int abc;
abc=999;

也可以在界說的同時(shí)停止初始化,例如:

int abc=999;

這兩種方法是等價(jià)的。

變量界說的地位

在VC或VS下,變量界說要放在函數(shù)的掃尾;也就是說,在界說變量之前不克不及有其他代碼。而在 GCC、Xcode 下,或許在運(yùn)用了 GCC 編譯器的 C-Free、Dev C++、Code::Blocks 下,變量界說可以放在函數(shù)的恣意地位。
例如,下面的代碼在 VC、VS、GCC、Xcode 下多是準(zhǔn)確的:

			#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 下是準(zhǔn)確的,而在 VC、VS 下就是毛病的。
為什么分歧的編譯器會(huì)有分歧的差別呢,基本緣由是什么呢?我們將在《C言語變量的界說地位以及初始值》和《C言語的兩套規(guī)范》兩節(jié)具體解說。

數(shù)據(jù)類型(Data Type)

數(shù)據(jù)是放在內(nèi)存中的,變量是給這塊內(nèi)存起的名字,有了變量就可以找到并運(yùn)用這份數(shù)據(jù)。但成績是,該若何運(yùn)用呢?
我們曉得,諸如數(shù)字、文字、符號、圖形、音頻、視頻等數(shù)據(jù)多是以二進(jìn)制方式存儲在內(nèi)存中的,它們并沒有實(shí)質(zhì)上的差別,那么,00010000 該了解為數(shù)字16呢,照樣圖像中某個(gè)像素的色彩呢,照樣要收回某個(gè)聲響呢?假如沒有特殊指明,我們并不曉得。
也就是說,內(nèi)存中的數(shù)據(jù)有多種說明方法,運(yùn)用之前必需要肯定;下面的int a;就標(biāo)明,這份數(shù)據(jù)是整數(shù),不克不及了解為像素、聲響等。int 有一個(gè)專業(yè)的稱謂,叫做數(shù)據(jù)類型(Data Type)
望文生義,數(shù)據(jù)類型用來闡明數(shù)據(jù)的類型,肯定了數(shù)據(jù)的說明方法,讓盤算機(jī)和程序員不會(huì)發(fā)生歧義。在C言語中,有多種數(shù)據(jù)類型,例如:

說  明字符型短整型整型長整型單精度浮點(diǎn)型雙精度浮點(diǎn)型無類型
數(shù)據(jù)類型charshortintlongfloatdoublevoid


這些是最根本的數(shù)據(jù)類型,是C言語自帶的,假如我們需求,還可以經(jīng)過它們構(gòu)成愈加復(fù)雜的數(shù)據(jù)類型,前面我們會(huì)逐個(gè)解說。

延續(xù)界說多個(gè)變量

為了讓程序的書寫愈加簡練,C言語支撐多個(gè)變量的延續(xù)界說,例如:

			int a, b, c; float m = 10.9, n = 20.56; char p, q = '@';

延續(xù)界說的多個(gè)變量以逗號,分隔,而且要具有相反的數(shù)據(jù)類型;變量可以初始化,也可以不初始化。

數(shù)據(jù)的長度(Length)

所謂數(shù)據(jù)長度(Length),是指數(shù)據(jù)占用若干個(gè)字節(jié)。占用的字節(jié)越多,能存儲的數(shù)據(jù)就越多,關(guān)于數(shù)字來說,值就會(huì)更大,反之能存儲的數(shù)據(jù)就無限。
多個(gè)數(shù)據(jù)在內(nèi)存中是延續(xù)存儲的,彼此之間沒有分明的界線,假如不明白指明數(shù)據(jù)的長度,盤算機(jī)就不曉得何時(shí)存取完畢。例如我們保管了一個(gè)整數(shù) 1000,它占用4個(gè)字節(jié)的內(nèi)存,而讀取時(shí)卻以為它占用3個(gè)字節(jié)或5個(gè)字節(jié),這顯然是不準(zhǔn)確的。
所以,在界說變量時(shí)還要指明數(shù)據(jù)的長度。而這恰好是數(shù)據(jù)類型的別的一個(gè)感化。數(shù)據(jù)類型除了指明數(shù)據(jù)的說明方法,還指清楚明了數(shù)據(jù)的長度。由于在C言語中,每一種數(shù)據(jù)類型所占用的字節(jié)數(shù)多是固定的,曉得了數(shù)據(jù)類型,也就曉得了數(shù)據(jù)的長度。
在32位情況中,各類數(shù)據(jù)類型的長度普通如下:

說  明字符型短整型整型長整型單精度浮點(diǎn)型雙精度浮點(diǎn)型
數(shù)據(jù)類型charshortintlongfloatdouble
長  度124448


C言語有若干種數(shù)據(jù)類型,每種數(shù)據(jù)類型長度是若干、該若何運(yùn)用,這是每一位C程序員都必需要控制的,后續(xù)我們會(huì)逐個(gè)解說。

最初的總結(jié)

數(shù)據(jù)是放在內(nèi)存中的,在內(nèi)存中存取數(shù)據(jù)要明白三件工作:數(shù)據(jù)存儲在哪里、數(shù)據(jù)的長度以及數(shù)據(jù)的處置方法。
變量名不只僅是為數(shù)據(jù)起了一個(gè)好記的名字,還通知我們數(shù)據(jù)存儲在哪里,運(yùn)用數(shù)據(jù)時(shí),只需供給變量名即可;而數(shù)據(jù)類型則指清楚明了數(shù)據(jù)的長度和處置方法。所以諸如int n;、char c;、float money;如許的方式就肯定了數(shù)據(jù)在內(nèi)存中的一切要素。
C言語供給的多種數(shù)據(jù)類型讓程序愈加靈敏和高效,同時(shí)也添加了進(jìn)修本錢。而有些編程言語,例如PHP、JavaScript等,在界說變量時(shí)不需求指明數(shù)據(jù)類型,編譯器會(huì)依據(jù)賦值狀況主動(dòng)推上演數(shù)據(jù)類型,愈加智能。
除了C言語,Java、C++、C#等在界說變量時(shí)也必需指明數(shù)據(jù)類型,如許的編程言語稱為強(qiáng)類型言語。而PHP、JavaScript等在界說變量時(shí)不用指明數(shù)據(jù)類型,編譯零碎會(huì)主動(dòng)推演,如許的編程言語稱為弱類型言語
強(qiáng)類型言語一旦肯定了數(shù)據(jù)類型,就不克不及再賦給其他類型的數(shù)據(jù),除非對數(shù)據(jù)類型停止轉(zhuǎn)換。弱類型言語沒有這種限制,一個(gè)變量,可以先賦給一個(gè)整數(shù),然后再賦給一個(gè)字符串。
最初需求闡明的是:數(shù)據(jù)類型只在界說變量時(shí)指明,并且必需指明;運(yùn)用變量時(shí)無需再指明,由于此時(shí)的數(shù)據(jù)類型曾經(jīng)肯定了。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI