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;

}
字符类型案例

 

posted @ 2020-02-26 18:34  kevin.Xiang  阅读(1178)  评论(0编辑  收藏  举报