目录
杂项关键字
sizeof
Return
数据类型关键字
char
进制
int
long,short
Unsigned,signed
Float,double
void
自定义数据类型
Struct
Union
enum
typedef
sizeof:编译器给予我们一个查看占用内存空间的操作
这里补充32位和64位编译器常见的字符内存空间占用情况
int a;
printf("the a is %d\n"),sizeof(a)); //(a)的括号可有可无
return 0;
就起一个指定返回值的作用
首先了解C语言的操作对象:是资源/内存(内存类型资源,GPU(显存),LCD(缓存)),这些资源和内存通过数据总线和地址总线去和cpu通信
C语言要去描述资源的属性
而数据类型关键字就是来描述资源(大小)这个属性的关键字——给予土地
硬件芯片操作的最小单位
bit(位):只有1和0的差别
软件操作的最小单位
char a;(一组8个bit)=1B byte就是方便软件编写而设置的最小控
应用场景:
硬件处理的最小单位=>
char buff{[xx] int buff[x] 当面对控制硬件时,用char可以在接收硬件信号时最省内存空间
ASCII (8bit)可以代表键盘上的所有按键=>因此使用这个来描述键盘的输入状态
史上最全ASCII码对照表0-255(%d)_yueyueniaolzp的博客-CSDN博客_ascii十进制代码十六进制代码MCS 字符或缩写DEC 多国字符名ASCII 控制字符100NUL空字符11SOH标...https://blog.csdn.net/yueyueniaolzp/article/details/82178954?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165889301316782390542898%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165889301316782390542898&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-82178954-null-null.142^v35^pc_rank_34,185^v2^control&utm_term=ASCII&spm=1018.2226.3001.4187补充最全ASCII码表
char a=300
一个典型的 溢出问题
char a=300L
Long型防止溢出
十进制 | 八进制 | 十六进制 | 二进制 |
3bit描述二进制 | 4bit描述二进制 |
八进制:0开头描述 int a=010(0开头后面被自动处理为八进制)
十六进制:0x开头描述 int a=0x10 (0x后面自动处理为十六进制)
编译器最优的处理能力
系统一整个周期,所能接受的最大处理单位,
32bit 4B int
16bit(单片机系统) 2B int
特殊长度的限制符
无符号数:更多来表示数据(位运算中的右移操作,正负占位符能否被移动)
有符号数:来表示数字
int a
没有经过显式的声明,都被认为是signed有符号数
浮点运算:就是小数
举例
0x10:表示0001 0000 ( 十六进制中的10就是16,刚好产生进位)
1.0怎么描述呢?
难道也是0001 0000?
浮点数和整数的表达方式完全不同
浮点型常量=>默认使用double型储存 (1.0后加上f,使用float来装载,省一半空间)
void用来占位,没有分配内存空间,可以后面做强制转换分配空间
在函数和变量中都起到占位声明的作用,没有什么定义
自定义=基本元素的集合
什么场景下会用上呢?
看到四个地址0000-0004 4个字节
以此类推共有四个字节,那就需要有个自定义的数据集来包含这4个int去控制
引入了struct
元素之间的和
struct myabc{ //只是声明新变量abc
unsigned int a
unsigned int b
} ;
struct myabc mybuf; //定义了一个myabc数据集
//括号中声明我需要组合的变量(顺序很重要)
//由于对应的是cpu中的数据,因此使用unsigned
相比Struct层层相叠,头尾相接
union共用起始地址
union myabc{ //声明
char a;
int b;
};
union myabc mybuf; //定义
可有可无——enumerate(列举)
被命名的整形常数的集合(打包常量)
enum abc{A,B,C};
等同于{A=0,B=A+1.C=B+1}
那如果我定义enum abc a
又会得到什么呢,答案是a只会作为一个int
指向其中某个特定元素,甚至你人为给他一个常量定义,它也可以直接把这个常量存下来
数据类型的别名
int a; a是一个int类型变量
typedef int a_t; a是一个int类型的外号(没有内存分配)
a_t mysize
xxx_t:typedef(关心物理实际意义)