加入CSDN是出于记录,希望有不足之处多加指正。
1.整型
- 概念:用来表达一个整数型的数据。
int a = 2;
- 需要注意:
1.先分配一片内存,命名为a;
2.根据数据的类型来分配内存大小(32位/64位系统整型都占4字节32位)
3.把数据2存放到该内存中
例: 4个字节 x 8位 (11001000) = 32位
4.最大值与最小值:-2147483648——2147483647
有符号的整型(32位):
5.整型的内存所占的空间大小由系统位数来决定,典型的32位和64位都占用4字节,32个位。
注意修饰:
short 短整型,是正常整型的一半,如果int为4自己则短整型为2字节,缩短整型的取值范围减少内存浪费
long长整型,是整型的两倍,如果int为4自己则短整型8字节,增大整型的取值范围,增加内存的宽度
long long长长整型,是整型的两倍(64位i系统),如果int为4自己则短整型为8字节,增大整型的取值范围,增加内存的宽度。
unsigned无符号,去除变量的符号位,用来无符号整型的取值范围,得到更大的取值范围,但是失去负数的取值
//如果定义了数据并且没有赋值——初始化,则该数据的内容是无法预测的
short s;
long l;
long long ll;
unsigned un = 10; //初始化
un = 11; //赋值
6.格式控制符:
%d 输出十进制整数
%hd 输出十进制的短整型
%ld 输出十进制的长整型
%o 以八进制输出数据 (不显示 o)
%x 以十六进制输出数据 (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)
%#o 以八进制输出数据 (# 是显示 o)
%#x 以十六进制输出数据
2.浮点型
- 概念:用来表达实数的数据类型(有小数点的数据)
- 分类
1. float //单精度典型的尺寸为4字节
2. double //双精度典型的尺寸为8字节
3. long double //长精度典型的尺寸为16字节
4. 占用的内存越多则精度越精确
注意:浮点数存储与读取过程可能会造成精度丢失。(数据存进去再取出来数据可能会发生变化),以32位浮点数为例,其存储的内部情况是这样的:
3.字符
1. char ch1 = 'a'; //'a'表示一个字节,代表字母a
2. char ch2 = '\n'; //'\n'表示一个字符,代表一个回车键
字符类型的数据其实是一个字节的正整型,每一个字符都有对应的一个正整数,这个对应关系有一个ASCII码表。
// man ascii 查看
int a = 99;
printf("%c \n", a); //将输出99所对应的字母 c
char c = 'd';
printf("%d\n", c); //将输出字符d所对应的十进制编码 100
4.字符串
//定义可以通过两个方式来表示字符指针,字符数组
char *s1 = "hello" ; //使用一个字符指针来表示一个字符串
char s2[] = "STY" //使用一个数组来表示一个字符串
//如果使用数组来表示字符串,数组中括号打大小可以省略,
//如果不省略必须要比字符串所需空间大 +1,s2[4]
字符串在内存中大存储:
1.是以字符串数组的形式来表示。
2.任何一个字符串都是以 ’\0‘ 来表示结束。s2 = {‘S’, ‘T’, ‘Y’, ‘\0’};
5.布尔类型
- 概念:布尓類型只有真/或假兩種取值,非零則真,零為假。
- 注意:使用布尓類型需要添加頭文件。
#include <stdbool.h>
#include <stdio.h>
#include <stdbool.h> //使用bool时加上这个头文件
int main(int argc, char const *argv[])
{
bool flag1 = false; //为假
bool flag2 = true; //为真
printf("%ld\n", sizeof(flag1)); //bool类型占用1字节
printf("%ld\n", sizeof(false)); //占用4字节,实际上等价于数字 0
printf("%ld\n", sizeof(true)); //占用4字节,实际上等价于 1
printf("%d\n", true); //其实是数字1
printf("%d\n", false); //其实是数字0
return 0;
}
6.常量与变量
- 常量:不可以改变内存内容的成为常量,可以改变内存内容的称为变量。
int a = 10; // a 就是变量,而10 就是常量
float f = 4.23 //f 就是变量,而4.23 就是常量
char ch[] = "school"; // ch就是变量,而“school”就是常量
常量类型:
10 整型常量 int
10L 长整型 long
10LL 长长整型 long long
100UL 无符号的长整型 unsigned long
4.12 双精度浮点 double
4.12L 长双精度浮点 long double
‘a’ 字符型 char
“boy” 字符串指针char * 字符串常量,匿名数组
7.标准输入
- 概念:键盘就是系统默认的标准输入文件,从键盘获取数据就是从标准输入获取数据。
scanf(); //格式化输入函数(必须按照它的格式来输入,否则数据将被遗留在缓冲区中)
scanf("%d", &num); //从键盘获得整数,并存放到地址&num
所以程序员需要把缓冲区的内容清空:
scanf("%d" , &num);
while(getchar() != '\n'); //清空缓冲区,给scanf清空
fgets(); //字符串输入函数(获取一行数据)
头文件:
#include <stdio.h>
char * fgets(char *s, int size, FILE *stream);
s 指读取到的数据所存放的内存地址
size 指读取的字节数
stream 指文件指针(stdin 标准输入,stdout 标准输出,stderr 标准出错)
int main()
{
char buf[32];
//从标准输入文件中获取32个字节到buf的内存中
fgets(buf , 32 , stdin);
//已读 size-1个字符为止,第32个字符将不被读取,而自动被结束符'\0' 代替
printf("读取到的字符串为:%s\n", buf );
return 0;
}