(第3章)資料

2021-10-01 07:10:15 字數 4243 閱讀 8364

c語言只有4種基本資料型別:整型,浮點型,指標,聚合型別(eg:陣列和結構等)。

其他的型別都是從這4種基本資料型別的某種組合派生而來的。

(1)整型 型別

最小範圍

其他char

0到127

–signed char

-127到127

–unsigned char

0到255

–short int

-32767到32767

至少16bit

unsigned short int

0到65535

–int

-32767到36767

–unsigned int

0到65535

–long int

-2147483647到2147483647

至少32bit

unsigned long int

0到4294967295––

––

eg:十進位制:983040,十六進製制:0xf000

其15-

12位都是1

value=value-『0』
eg1:

宣告了乙個jay_type型別

enum jay_type

;該型別變數的宣告:

enum jay_type milk, gas_can;

eg2:只使用乙個宣告

enum

milk, gas_can;

這裡的cpu=

0,pint=

1,quart=

2,若由多,依次類推

eg3:

enum

milk, gas_can;

只對部分符號用這種方式賦值也是合法的。入宮某個符號未顯示地指定乙個值,那麼它地值就比前面乙個符號的值大1

.

(2)浮點型別

3.14

1e025

.浮點數自在預設情況下都是double型別的,若後面有個l或l,則是long double,若後面跟著f或f,則是float型別的

(3)指標

「hello」

「」

說明符(乙個或者多個) 宣告表示式列表

short, short int, signed short, signed short int

unsigned short, unsigned short int

–int, signed int, signed

unsigned int, unsigned

–long, long int, signed long,signed long int

unsigned long, unsinged long int

int values[20]

;常見解釋:宣告乙個整型陣列,陣列包含20個整型元素

更好解釋:名字values+乙個下標,產生了乙個int的值(共有20個整型值)

要讓某個陣列的下標從10開始,只要在實際引用時,把下標值減去10即可。

eg1:

int*a;

表示式*a產生的結果型別是int;

a是乙個指向int的指標;

eg2:

宣告三個指標

int*a,

*b,*c;e而不要用int

* a,b,c;

後面的表示:a是指標,b和c是普通的整型

eg3:

char *message=

"hello word"

;等價於:

char *message;

message=

"hello word"

;

eg1:

typedef char *point;

這個宣告把識別符號point作為指向字元的指標型別的新名字;

宣告a是乙個指向字元的指標;

point a;

eg2:

應該使用typedef而不是#define來建立新的型別名,因為後者無法正確地處理指標型別。

eg:#define point char*

point a,b;

正確宣告了a,b卻宣告為了乙個字元;

(1)const靠誰近,誰就是常量

int const a;

const int a;

上述都是將a宣告為乙個整數,它的值不能被修改;

(2)int const *pci;

表示:指向整型常量的指標,可以修改指標的值,但是不能修改它所指向的值;

int*const pcil

表示:宣告pci是乙個指向整型的常量指標,此指標式常量,其值無法修改,但是可以修改它所指向的整型的值。

int const *const cpi;

表示:無論式指標本身還是他所指向的值都是常量,不允許修改。

(3)建立名字常量:

#define max 50

int const max=50

;這種情況下,使用#define更好,因為const變數只能用於允許使用變數的地方;

位於一對花括號之間的所有語句稱為乙個**塊。

任何在**塊的開始位置宣告的識別符號都具有**塊作用域block scope:表示他們可被整個**塊中的所有語句訪問。

任何在所有**塊之外宣告的識別符號都具有檔案作用域file scope。

它表示這些識別符號從他們的宣告之外直到它所在的原始檔結尾處都可以訪問。

注意:在標頭檔案中編寫並通過#include指令包含到其他檔案中的宣告就好像是直接寫在那些檔案中一樣,他們的作用域並不侷限於標頭檔案的檔案尾!!

只適用於函式原型中宣告的引數名;

與函式的定義不同,在原型中,引數的名字非必須,可以隨意取名字。

原型作用域的作用:防止這些引數名與其他部分的名字衝突。

int a;

//檔案作用域eg

int b(

int c)

;//檔案作用域eg,函式原型的eg中的引數c

int d(

int e)

////檔案作用域eg:在檔案中定義的函式名也具有檔案作用域,因為函式名本身並不屬於任何**塊

}

typedef char *a;

int b;

int c(

int d)

識別符號b,c,f的鏈結性式external;其餘的識別符號的鏈結屬性為none;

若另外乙個原始檔也包含了識別符號b的類似宣告並呼叫函式c,則他們實際上訪問的式這個原始檔所定義的實體。

f之所以式external的,是因為它是個函式名。

//a,b,c儲存型別為靜態的,不儲存於堆疊中。eg:當程式開始執行時,變數a將初始化為5。

//a,b,c的作用域一直延伸到該原始檔結束為止

int a=5;

//a的鏈結性(預設):extern

extern int b;

static int c;

//函式d的作用域從該行直接到檔案結束

//函式d的定義對於後面想要呼叫它的函式而言,起到了函式原型的作用

//函式d的儲存型別(預設)是external的,其他原始檔只要在檔案上存在d的原型,就可以呼叫d

int d(

int e)..

.}//函式i具有靜態鏈結屬性,可以防止它被該原始檔之外的任何函式呼叫。

//事實上,其他原始檔也可能宣告自己的函式i,於該原始檔的i是不同的。

//i的作用域是從它宣告的位置直到整個原始檔結束。函式d不可以呼叫i,因為在d之前不存在i的原型!!

static int i(

)

變數型別

宣告的位置

是否存於堆疊

作用域若宣告為static

全域性所有**塊之外

否從宣告處到檔案尾

不允許從其他原始檔訪問

區域性**塊起始處

是整個**塊

變數不儲存於堆疊中,它的值在程式整個執行期一直保持

形式引數

函式頭部

是整個函式

不允許–––

––參考:

第3章 資料儲存

3.1 資料的型別 計算機的儲存硬體都有兩種狀態,開或關,可以對應數學中的二進位制,即0或1,所以計算機用二進位制來儲存資料。3.2 儲存數字 計算機儲存器被劃分為許多位數一定的儲存單元,乙個儲存單元能表示一定範圍的數字,先將數字轉化為二進位制,再以一定的方法儲存在記憶體中,這些方法有 表示整數的無...

第3章 處理資料

基本型別 整數 浮點數 提供多種變體 typedef short int wchar t wchar t 實際上的空間是和 short int 一樣 typedef 為乙個已有的型別取乙個新的名字 typedef int feet feet是int的了另乙個名稱 下面的宣告是完全合法的,它建立了乙個...

第3章 處理資料

變數名 1 只能使用字母字元 數字和下劃線。2 名字的第乙個字元不能是數字。3 區分大小寫。4 不能將c 關鍵字用作名稱。整型 不同的硬體環境下整型所佔據的bit位數並不相同,但確保了最小長度 1 short至少16位。2 int至少和short一樣長。3 long至少32位,且至少和int一樣長。...