数据类型
2.1常量与变量
2.1.1关键字
C语言的关键字共32个
|数据类型关键字||
char | short | int |
---|---|---|
unsigned | signed | struct |
|控制语句关键字|
if | else | switch |
---|---|---|
do | while | break |
|存储类关键字|
auto | extern | register |
---|
|其他关键字|
sizeof | typedef | volatile |
---|
2.1.2数据类型
数据类型的作用:编译器预算对象(变量)分配的内存空间大小
2.1.3常量
常量:
-
在程序运行过程中,其值不能被改变的量
-
常量一般出现在表达式或赋值语句中
整型常量 | 10,20,30,-100,0 |
---|---|
浮点型常量 | 3.14,0.25,-0.125 |
字符型常量 | ‘a’,‘b’,‘1’,’-123’ |
字符串常量 | “a”,“abc”,“1234”,“3.14” |
定义常量的方式:
方式一 :const 数据类型 常量名 = 值
方式二 :#define 常量名 值
2.1.4变量
变量:
-
在程序运行过程中,其值可以被改变的量
-
变量在使用前必须先定义,定义变量前必须有相应的数据类型**
定义变量的方式:
数据类型 变量名 = 值 变量名 = 表达式
标识符命名规则:
-
标识符不能是关键字
-
标识符只能由数字、字母、下划线组成
-
第一个字符必须为字母或下划线
-
标识符中字母区分大小写
变量特点:
-
变量在编译时为其分配相应的内存空间
-
可以通过其 名字和地址 访问相应内存
局部变量:
在定义局部变量 可以在数据类型前加修饰 auto 也可以不加
2.1.5使用示例
示例:
//买菜
#include<stdio.h>
int main(void)
{
// 买菜黄瓜 3元/斤 购买 5/斤
// 常量:在程序运行中,其值不能发生改变的量
const int price = 3; // const 约束 变量 成为 只读变量,不能修改
int weight = 5;
int sum = price * weight;
printf("%d\n", sum); // %d 占位符 表示一个十进制的整型
return 0;
}
//求圆的面积和周长
// 圆的面积 S = pi * r * r
// 圆的周长 L = 2 * pi * r
#include<stdio.h>
// 宏定义常量 定义方法: #define 名称 值
#define PI 3.14
int main (void)
{
// connst float pi = 3.14; // pi 属于常量 不能改变,所以用 const 修饰
float r = 2.f; // f 表示是对应 float 类型 使用的数据
// 面积
float S = pi * r * r;
// 周长
float L =2 * pi * r;
// %f 占位符 表示输出一个浮点型,默认保留6位小数,
// %.2f 保留连两位小数,四舍五入
// double 的占位符是%lf
printf("圆的面积:%f\n",S)
printf("圆的周长:%f\n",L)
return 0;
}
2.2整型(int)
2.2.1 整型变量的定义和输出
打印格式 | 含义 |
---|---|
%d | 输出一个有符号的 10 进制 int 类型 |
%o | 输出 8 进制的 int 类型 |
%x | 输出 16 进制的 int 类型,字母以小写输出 |
%X | 输出 16 进制的 int 类型,字母以大写输出 |
%u | 输出一个 10 进制的无符号数 |
#include<stdio.h>
int main(void)
{
// 数据类型 标识符 = 值
// 无符号 unsigned 有符号 signed(可以省略)
int a = 10;
unsigned b = -10; // 乱码
printf("%d\n", a);
printf("%u\n", b);
// 定义八进制数据,以 0 开头
int c = 0123;
// 定义十六进制数据, 以 0x 开头
int d = 0x123;
// 在计算机定义数据时,不可以直接定义二进制
printf("%o\n", c);
printf("%x\n", d);
return 0;
}
2.2.2 整型变量的输入 — (scanf 函数)
scanf 引发安全问题两种解决办法:
- 在代码开头第一行输入 #define _CRT_SECURE_NO_WARNING
- 或在代码命令中输入 #pragma warning(disable:4996)
#define _CRT_SECURE_NO_WARNING
#incloud<stdio.h>
int main(void)
{
int a;
printf("请输入数字:")
// & 运算符 表示取地址运算符
scanf("%d", &a); // 不添加第一行代码 VS认为是不安全的,会出现程序错误,最后乱码
// #pragma warning(disable:4996) ,与第一行代码任选其一添加
printf("%d\n", a);
return 0;
}
2.2.3 short、int、long、long long
数据类型 | 占用空间 |
---|---|
short(短整型) | 2字节 |
int(整型) | 4字节 |
long(长整型) | Windows为4字节,Linux为4字节(32位),8字节(64位) |
long long(长长整型) | 8字节 |
注意
- 需要注意的是,整型数据在内存中占的字节数与所选择的操作系统有关。虽然C语言标准中没有明确规定整型数据的长度,但 long 类型整数的长度不能短于 int 类型,short类型整数的长度不能长于 int 类型。
- 当一个小的数据类型赋值给一个大的数据类型,不会出错,因为编译器会自动转化。但当一个大的数据类型赋值给小的数据类型,那么就可能丢失高位。
- short <= int <= long < long long
整数常量 | 所需类型 |
---|---|
10 | 代表 int 类型 |
10l,10L | 代表 long 类型 |
10ll,10LL | 代表 long long 类型 |
10u,10U | 代表 unsigned int 类型 |
10ul,10UL | 代表 unsigned long 类型 |
10ull,10OLL | 代表 unsigned long long 类型 |
打印格式 | 含义 |
---|---|
%hd | 输出 short 类型 |
%d | 输出 int 类型 |
%ld | 输出 long 类型 |
%lld | 输出 long long 类型 |
%hu | 输出 unsigned short 类型 |
%u | 输出 unsigned int 类型 |
%lu | 输出 unsigned long 类型 |
%llu | 输出 unsigned long long 类型 |
#include<stdio.h>
int main(void)
{
//短整型变量
short a = 10;
// 整型变量
int b = 10;
// 长整型变量
long c = 10l; // 或者10L
// 长长整型变量
long d = 10ll; // 或者10LL
// 打印相应数据
printf("%hd\n", a);
printf("%d\n", b);
printf("%ld\n", c);
printf("%lld\n", d);
// 数据类型在内存中开辟的字节 (BYTE) 大小 ---- 关键字 sizeof
// 1B = 8bit
// 两种格式 sizeof(数据类型); sizeof(变量名)
printf("整型:%d\n", sizeof(int)); // 说明 int 类型占用 4个 字节
printf("短整型:%hd\n", sizeof(short)); // 说明 short 类型占用 2个 字节
printf("长整型:%ld\n", sizeof(long)); // 说明 long 类型占用 4个 字节
printf("长长整型:%lld\n", sizeof(long long)); // 说明 long long 类型占用 8个 字节
}
2.2.4 有符号数和无符号数的区别
-
有符号数
有符号数是最高位位符号位,0代表正数,1代表负数
include<stdio.h>
int main()
{
signed int a = -123456789;
printf("%X\n", a);
return 0;
}
- 无符号数
无符号数最高位不是符号位,而是数的一部分,无符号数不可能是负数。
2.3 sizeof 关键字 ( 计算数据类型长度)
- sizeof 不是函数,所以不需要包含任何头文件,它的功能是计算一个数据类型的大小,单位为字节
- sizeof 的返回值为size_t
- size_t 类型在32位操作系统下是unsigned int,是一个无符号的整数
#include<stdio.h>
int main (void)
{
int a;
int b = sizeof(a); // sizeof 得到指定值占用内存的大小 单位:字节
printf("b = %d\n", b);
size_t c = sizeof(a);
printf("c = %d\n",c);
return 0;
}