資料型別以及變數與常量

2021-07-14 18:12:49 字數 4630 閱讀 7251

一.

資料型別

①什麼是資料型別

資料集合的劃分,不同資料型別對cpu

的意義不一樣

資料型別分基本資料型別和復合資料型別,

復合資料型別包括 陣列,結構,聯合,列舉,指標

基本資料型別包括 空型別,字元型,數值型

而數值型又包括實型(單精度實型,雙精度實型),整型(短整型,整型,長整型\\\

細分分有無符號)

②如何定義變數(左右法則)

c語言所有複雜的指標宣告,都是由各種宣告巢狀構成的。如何解讀複雜指標宣告呢?右左法則是乙個既著名又常用的方法。不過,右左法則其實並不是

c標準裡面的內容,它是從

c標準的宣告規定中歸納出來的方法。

c標準的宣告規則,是用來解決如何建立宣告的,而右左法則是用來解決如何辯識乙個宣告的,兩者可以說是相反的。右左法則的英文原文是這樣說的:

the right-left rule: start reading the declaration from the innermost parentheses, go right, and then go left. when you encounter parentheses, the direction should be reversed. once everything in the parentheses has been parsed, jump out of it. continue till the whole declaration has been parsed

右左法則:首先從最裡面的圓括號內未定義的識別符號開始閱讀看起,然後往右看,再往左看。每當遇到圓括號時,就應該掉轉閱讀方向。一旦解析完圓括號裡面所有的東西,就跳出圓括號。重複這個過程直到整個宣告解析完畢。

總之對宣告進行分析,最根本的方法還是按優先順序和結合性來模擬替換,從那些最基本的宣告進行模擬,簡化,從而進行理解

。接下來我將舉出一系列例題來具體理解。

1. int a ;

a:整型變數

2. int *a ;      a:整型指標變數

3. int **a ;

a:整型指標的指標變數

4. int a[10] ;

a:整型陣列

5. int *a[10] ;    a:整型指標陣列

6. int (*a)[10] ;   a:整型陣列指標變數

7. int (*a)(int) ;    a:函式指標變數(形參型別

int,返回值型別

int)

8. int (*a[10])(int) ;   a:函式指標陣列

9. int * (* (*fp1) (int) )[10] ;  fp1:函式指標變數,該函式指標指向乙個形參為

int,返回值為陣列指標的函式,該陣列指標指向乙個整型指標陣列(或者這樣理解 宣告了乙個叫

fp1的指標,指向乙個引數為

(int)

的函式,這個函式的返回值也是乙個指標,指向乙個陣列,這個陣列裡存放了(

int *

)型別的值 )

10. int * (* (*arr[5]) ( ) ) ( ) ;   arr:函式指標陣列,該陣列的元素指向乙個形參為空,返回值為函式指標的函式,該函式指標指向乙個形參為空,返回值為

int的函式

11. float (* (*b ( ) )[ ] ) ( ) ;  b:函式,形參為空,返回值為陣列指標,該指標指向乙個函式指標陣列,該陣列的元素指向乙個形參為空,返回值為

float

的函式12. void *( *c )(char,int( * )( ) ) ; c:是乙個函式指標變數。該函式是乙個形參為

char

,另一形參為 形參為空返回值為

int型的函式指標變數且返回值為

void

的函式。

③位元組長度

bit   位元組

=8bit

半字=2

個位元組=16bit 字=4

個位元組=32bit

sizeof() 為乙個運算子  測量資料型別 如

sizeof(int)

如32位系統下

int short long float double char

4   2   4    4   8    1

32位系統下 指標型別都為

4個位元組(位址長度固定,由作業系統決定)

④取值範圍

目前,主流編譯環境都是32

位,32

位平台下各種資料型別取值範圍:

整型 [signed]int -2147483648~+2147483648

無符號整型unsigned[int] 0~4294967295

短整型 short [int] -32768~32768

無符號短整型unsigned short[int] 0~65535

長整型 long int -2147483648~+2147483648

無符號長整型unsigned [int] 0~4294967295

字元型[signed] char -128~+127

無符號字元型 unsigned char 0~255

單精度 float 3.4 x 10^

(-38

)~ 3.4 x 10^

(+38

)雙精度double 1.7 x 10^

(-308

)~ 1.7 x 10^

(+308

)長雙精度 long double 1.7 x 10^

(-308

)~ 1.7 x 10^

(+308

)⑤符號與無符號

有符號數和無符號數進行比較運算時(==

,<,> ,<=,>=

)有符號數隱式轉換成了無符號數(即底層的補碼不變,但是此數從有符號數變成了無符號數)

⑥強制型別轉換

char < int 隱式型別轉換

)  在型別不相容時才需強制型別轉換。

二.變數與常量

①什麼是變數,變數的特點

變數即在程式執行過程中它的值是允許改變的量。

變數的三大特點: 1.

變數的資料型別:主要說明變數占用記憶體空間大小 ,如int

型。2.

變數的作用域:變數的有效性的範圍,即變數的使用範圍 3.

變數的儲存型別:變數在記憶體中的儲存方式。不同的儲存方式,影響變數在記憶體中的生存週期

②宣告與定義

定義:建立乙個變數,為其分配記憶體空間,並為它取名(變數名),乙個變數只能定義一次;

宣告:告知編譯器,這個名字(變數名)已經匹配在一塊記憶體上了,但是並未為其分配記憶體;

-------------------------------

變數的宣告有兩種情況:

定義性宣告:需要建立儲存空間,如 int a

在宣告的時候就已經建立了儲存空間。

引用性宣告:不需要建立儲存空間,如 extern int a

其中變數

a是在別的檔案中定義的。

③全域性變數與區域性變數的區別 1.

存放位置     

區域性變數存放於棧空間,全域性變數存放在 資料段的data

(靜態資料區)區域

2.賦值

當我們定義變數時,如果定義為全域性變數,系統會自動把變數初始化為預設值(

內建型別初始化為系統預設值,自定義型別呼叫相應的初始化函式進行初始化

),而定義為區域性變數時,系統不會自動初始化變數,我們必須手動對變數進行初始化

(無論是內建型別還是自定義型別

),否則得到的結果可能和我們預期的不一致,甚至導致程式出錯

3.何時釋放

全域性變數:在編譯時分配,在main

結束時釋放;

區域性變數、形參:在函式呼叫時分配,在函式返回時釋放 4.

作用域

全域性變數具有全域性作用域。全域性變數只需在乙個原始檔中定義,就可以作用於所有的原始檔。當然,其他不包括全域性變數定義的原始檔需要用extern

關鍵字再次宣告這個全域性變數。

靜態區域性變數具有區域性作用域。它只被初始化一次,自從第一次初始化直到程式與你新內閣結束都一直存在,他和全域性變數的區別在於全域性變數對所有的函式都是可見的,而靜態區域性變數只對定義自己的函式體始終可見。

區域性變數也只有區域性作用域,他是自動物件,他在程式執行期間不是一直存在,而是只在函式執行期間存在,函式的一次呼叫結束後,變數就被撤銷,其所占用的記憶體也被收回。  

靜態全域性變數也具有全域性作用域,他與全域性變數的區別在於如果程式包含多個檔案的話,他作用於定義它的文裡,不能作用到其他檔案裡,即被static

關鍵字修飾過的變數具有檔案作用域。這樣即使兩個不同的原始檔都定義了相同的靜態全域性變數,他們也是不同的變數。

④變數的儲存區域的劃分 核心

棧空間堆空間

資料段**段

棧空間:區域性變數,函式形參,自動變數

堆空間:malloc ralloc calloc

分配空間

資料段分為bbs,rodata,data

。 bss:

儲存未初始化的全域性變數

rodata:常量

data(靜態資料區

):全域性變數,

static

修飾變數

資料段**段 即資料區

棧空間特點:

先進後出,管理許可權:系統

堆空間特點:

先進先出,管理許可權:使用者

C 資料型別以及常量與變數

一 資料的量級 二 基本資料型別 關鍵字說明 位元組大小 bool 邏輯值 真 假 1sbyte 有符號8位整數 1byte 無符號8位整數 1short 有符號16位整數 2ushort 無符號16位整數 2int 有符號32位整數 4uint 無符號32位整數 4long 有符號64位整數 8u...

PHP PHP變數常量 以及資料型別

1 注釋 和js一樣 單行注釋 多行 2 裡面可以巢狀html標籤 echo hello world 換行 echo echo echo 123 echo 3 變數和常量 1 變數宣告方式 變數名 變數名字 字母 數字 下劃線組成 但是不能數字開頭 name zhangsan echo name 2...

資料型別 變數與常量

變數特點 1.變數的資料型別 變數占用記憶體空間的大小 2.變數的作用域 生命週期 變數的有效性範圍 3.變數的儲存型別 變數在記憶體中的儲存方式 記憶體和硬碟的區別 記憶體 資料調定會丟失,放的是執行資料,動態執行 硬碟 儲存靜態資料 3g使用者空間 1.棧空間 區域性變數,函式形參,自動變數 2...