C語言 數據類型


C語言 數據類型

數據類型介紹

數據類型的作用:編譯器預算對象(變量)分配的內存空間大小

一、基本類型

// 字符型
char

// 整型
short
int
long
long long

// 浮點型、實型
float
double

二、構造類型

控制語句關鍵字:
// 條件判斷
ifelse
switchcasedefault

// 循環語句
for
whiledo

// 循環約束語句
breakcontinue

// 無條件跳轉語句
goto

// 函數返回值、結束主程序
return

存儲類型關鍵字:
// 定義局部變量
auto

// 聲明
extern

// 建議性指令
register

// 靜態數據、靜態函數
static

// 定義常亮、只讀變量
const

其他關鍵字:
// 計算數據類型占用大小
sizeof
// 定義別名、定義函數指針
typedef:

// 防止編輯器優化
volatile

三、指針類型

// 部分基礎類型*
類型*

數據類型 常量與變量

1、常量:

  • 在程序運行過程中,其值不能被改變的量

  • 常量一般出現在表達式或賦值語句中

整型常量

100200-1000

實型常量

3.14 0.125-3.123

字符型常量

a,b,1,\n

字符串常量

a,ab”,“12356

2、變量:

  • 在程序運行過程中,其值可以改變

  • 變量在使用前必須先定義,定義變量前必須有相應的數據類型

3、標識符命名規則:

  • 標識符不能是關鍵字

  • 標識符只能由字母、數字、下划線組成

  • 第一個字符必須為字母或下划線

  • 標識符中字母區分大小寫

4、變量特點:

  • 變量在編譯時為其分配相應的內存空間

  • 可以通過其名字和地址訪問相應內存

5、案例:

#include<stdio.h>

int main(void)
{
    // 常量:在程序運行過程中 其值不能發生改變的量 稱為常亮
    const int price = 3;// 常量、只讀變量
    // 變量:在程序運行過程中 其值可以發生變化的量 稱為變量
    int xsk = 5;// 變量
    printf("%d\n", price);
    printf("%d\n", xsk);
    return 0;
}
常量與變量案例
#include <stdio.h>
// 宏定義變量、可在定義常量時使用、結尾不要加;號
#define PI 3.14159
// 圓的面積 s = pi * r * r
// 圓的周長 l = 2 * pi * r

int main(void)
{
 // 在定義局部變量是可以在數據類型前加修飾auto、也可以不加
    auto float r = 3.4;
    float s = PI * r * r;
    float l = 2 * PI * r;
    // 占位符 %f 表示輸出一個浮點型 lfoat、默認保留六位小數
    // %.2f:表示小數點后保留兩位小數
    printf("圓的面積:%.2f\n", s);
    printf("圓的面積:%.2f\n", l);

// 變量標識符規范:
// 1、不能使用系統關鍵字
// 2、允許使用字母數字下划線
// 3、不允許字字開頭
// 4、標識符區分大小寫
// 5、見名知義
return 0;
}
宏定義變量:圓的編輯與周長

數據類型 聲明與定義

說明

  • 聲明變量不需要建立存儲空間,如:extern int a;
  • 定義變量需要建立存儲空間,如:int b;

限定符

含義

extern

聲明一個變量,extern聲明的變量沒有建立存儲空間。

extern int a;

const

定義一個常量,常量的值不能修改。

const int a = 10;

volatile

防止編譯器優化代碼

register

定義寄存器變量,提高效率。register是建議型的指令,而不是命令型的指令,如果CPU有空閑寄存器,那么register就生效,如果沒有空閑寄存器,那么register無效。

案例

#include <stdio.h>

int main()
{
    //extern 關鍵字只做聲明,不能做任何定義
    //聲明一個變量a,a在這里沒有建立存儲空間
    extern int a;
    a = 10;    //err, 沒有空間,就不可以賦值

    int b = 10;    //定義一個變量b,b的類型為int,b賦值為10

    return 0;
}
聲明與定義案例
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int main(void)
{
    // 告訴內存 聲明a變量、可以不填
    extern int a;
    // 定義賦值
    int a = 10;
    return 0;
}
定義extern案例

從廣義的角度來講聲明中包含着定義,即定義是聲明的一個特例,所以並非所有的聲明都是定義:

  • int b 它既是聲明,同時又是定義
  • 對於 extern b來講它只是聲明不是定義

一般的情況下,把建立存儲空間的聲明稱之為“定義”,而把不需要建立存儲空間的聲明稱之為“聲明”。

數據類型 基礎類型

一、int 、short、longlong long 整型

1、整型類型

數據類型

占用空間

short(短整型)

2字節

int(整型)

4字節

long(長整形)

Windows4字節,Linux4字節(32)8字節(64)

long long(長長整形)

8字節

2、占位符

打印格式

含義

%hd

輸出short類型

%d

輸出int類型

%l

輸出long類型

%ll

輸出long long類型

%hu

輸出unsigned short類型

%u

輸出unsigned int類型

%lu

輸出unsigned long類型

%llu

輸出unsigned long long類型

 

打印格式

含義

%d

輸出一個有符號的10進制int類型

%o(字母o)

輸出8進制的int類型

%x

輸出16進制的int類型,字母以小寫輸出

%X

輸出16進制的int類型,字母以大寫寫輸出

%u

輸出一個10進制的無符號數

 

3、整型常量

整型常量

所需類型

10

代表int類型

10l, 10L

代表long類型

10ll, 10LL

代表long long類型

10u, 10U

代表unsigned int類型

10ul, 10UL

代表unsigned long類型

10ull, 10ULL

代表unsigned long long類型

4、案例

#include <stdio.h>

int main(void)
{
    // 定義十進制
    int a = 10;
    // 定義八進制:是以0開頭的
    int b = 0123;
    // 定義十六進制:是以0x開頭的
    int c = 0x123;

    // 在計算機定義數據時不可以直接定義二進制

    printf("%d\n", a);
    // 占位符 %x 輸出一個十六進制整形
    printf("%x\n", c);    
    // 占位符 %X 輸出一個十六進制整形、 表示大寫
    printf("%X\n", c);
    // 占位符 %o 輸出一個八進制整形
    printf("%o\n", b);

    return 0;
}
整型案例
#include <stdio.h>

int main(void)
{
    // 數據類型 標識符 = 值、有符號表示,值既可以是正數也可以是負數。
    // 有符號 signed (可以省略)、只能是正數,如果是負數輸出十進制整形數據
    signed int a = 10;
    // 無符號 unsigned
    unsigned int b = -10;


    printf("%d\n", a);
    // %u 占位符、表示輸出一個無符號十進制整形數據
    printf("%u\n", a);

    return 0;
}
整型案例:定義有符號與無符號

5、其他說明

需要注意的是,整形數據在內存中占得字節數與所選擇的操作系統有關。

雖然C語言標准中沒有明確規定整形數據的長度,但 long 數據證書的長度不能短於 int 類型,short 類型整數長度不能長於 int 類型。

當一個小的數據類型賦值給一個大的數據類型,不會出錯,因為編譯器會自動轉換。但當一個大的類型賦值給一個小的數據類型,那額就可能丟失高位。

二、float、double 浮點型

1、浮點類型

數據類型

占用空間

有效數字范圍

float

4字節

7位有效數字

double

8字節

1516位有效數字

2、占位符

  • float 占位符:%f
  • double 占位符:%f

3、案例

#include <stdio.h>

int main()
{
    // float需要以f結尾
    float a = 3.14f;
    double b = 3.14;
    printf("%.2f\n", a);
    printf("%1f\n", b);

    // sizeof 字節大小
    // 浮點型數據,存儲在內存中的格式分為:符號位、指數位、小數位
    printf("%d\n", sizeof(float));
    printf("%d\n", sizeof(double));
    return 0;
}
浮點類型案例
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>


int main(void)
{
    // 占位符 %e:科學計數法表示
    float a = 3.2e-2f;
    printf("%e\n", a);

    return 0;
}
浮點類型案例:科學雲算法
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int main(void)
{
    int a = 10;
    float b = 3.14;
    // 占位符 %p:表示輸出一個變量對應的內存地址編號(無符號16進制輸出)
    printf("%p\n", &a);
    printf("%p\n", &b);

    // 大小端對齊
    getchar();
    return 0;
}
浮點數案例:查看內存地址中對應變量的16進制存儲信息

4、其他說明 

實型變量也可以稱為浮點型變量,浮點型變量是用來存儲小數數值的。

在C語言中, 浮點型變量分為兩種:單精度浮點數(float)、 雙精度浮點數(double), 但是double型變量所表示的浮點數比 float 型變量更精確由於浮點型變量是由有限的存儲單元組成的,因此只能提供有限的有效數字。

在有效位以外的數字將被舍去,這樣可能會產生一些誤差。

不以f結尾的常量是double類型,以f結尾的常量(如3.14f)是float類型。

二、char 字符型

1、字符變量說明

字符型變量用於存儲一個單一字符,在 C 語言中用 char 表示,其中每個字符變量都會占用 1 個字節。在給字符型變量賦值時,需要用一對英文半角格式的單引號(' ')把字符括起來。

字符變量實際上並不是把該字符本身放到變量的內存單元中去,而是將該字符對應的 ASCII 編碼放到變量的存儲單元中。char的本質就是一個1字節大小的整型。

2、ASCII表(常用)

ASCII

控制字符

ASCII

字符

ASCII

字符

ASCII

字符

0

NUT

32

(space)

64

@

96

1

SOH

33

!

65

A

97

a

2

STX

34

"

66

B

98

b

3

ETX

35

#

67

C

99

c

4

EOT

36

$

68

D

100

d

5

ENQ

37

%

69

E

101

e

6

ACK

38

&

70

F

102

f

7

BEL

39

,

71

G

103

g

8

BS

40

(

72

H

104

h

9

HT

41

)

73

I

105

i

10

LF

42

*

74

J

106

j

11

VT

43

+

75

K

107

k

12

FF

44

,

76

L

108

l

13

CR

45

-

77

M

109

m

14

SO

46

.

78

N

110

n

15

SI

47

/

79

O

111

o

16

DLE

48

0

80

P

112

p

17

DCI

49

1

81

Q

113

q

18

DC2

50

2

82

R

114

r

19

DC3

51

3

83

S

115

s

20

DC4

52

4

84

T

116

t

21

NAK

53

5

85

U

117

u

22

SYN

54

6

86

V

118

v

23

TB

55

7

87

W

119

w

24

CAN

56

8

88

X

120

x

25

EM

57

9

89

Y

121

y

26

SUB

58

:

90

Z

122

z

27

ESC

59

;

91

[

123

{

28

FS

60

92

/

124

|

29

GS

61

=

93

]

125

}

30

RS

62

94

^

126

`

31

US

63

?

95

_

127

DEL

3、轉義字符

注意:紅色字體標注的為不可打印字符。

轉義字符

含義

ASCII碼值(十進制)

\a

警報

007

\b

退格(BS) ,將當前位置移到前一列

008

\f

換頁(FF),將當前位置移到下頁開頭

012

\n

換行(LF) ,將當前位置移到下一行開頭

010

\r

回車(CR) ,將當前位置移到本行開頭

013

\t

水平制表(HT) (跳到下一個TAB位置)

009

\v

垂直制表(VT)

011

\\

代表一個反斜線字符"\"

092

\'

代表一個單引號(撇號)字符

039

\"

代表一個雙引號字符

034

\?

代表一個問號

063

\0

數字0

000

\ddd

8進制轉義字符,d范圍0~7

38進制

\xhh

16進制轉義字符,h范圍0~9a~fA~F

316進制

4、占位符

  • char 字符占位符:%c
  • char 字符串占位符:%s

5、案例

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int main01()
{
    // 字符型變量
    char ch = 'a';

    // 打印字符變量
    printf("%c\n", ch);
    // 打印字母a對應十進制數
    printf("%d\n", ch);
    printf("字符型大小:%d\n", sizeof(ch));
    return 0;
}

int main02()
{
    // 結果通過ASCLL碼代表數字相減,結果為ASCLL碼對應字符
    char ch1 = 'a';
    char ch2 = 'A';
    printf("%d\n", ch1 - ch2);

    // 通過字符串相減實現大小寫切換
    char ch;
    scanf("%c", &ch);
    printf("%c\n", ch - 32);
    return 0;

}
字符類型案例

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM