嵌入式Linux(四)—嵌入式C语言(杂项/数据类型关键字)

目录

杂项关键字

sizeof 

Return

数据类型关键字

char

进制

 int

long,short 

Unsigned,signed

Float,double

void

自定义数据类型

Struct

Union

enum 

typedef


杂项关键字

sizeof 

sizeof:编译器给予我们一个查看占用内存空间的操作

这里补充32位和64位编译器常见的字符内存空间占用情况

 

嵌入式Linux(四)—嵌入式C语言(杂项/数据类型关键字)_第1张图片

 

int a;
printf("the a is %d\n"),sizeof(a));  //(a)的括号可有可无
return 0;

Return

就起一个指定返回值的作用

数据类型关键字

首先了解C语言的操作对象:是资源/内存(内存类型资源,GPU(显存),LCD(缓存)),这些资源和内存通过数据总线和地址总线去和cpu通信

C语言要去描述资源的属性

而数据类型关键字就是来描述资源(大小)这个属性的关键字——给予土地

char

硬件芯片操作的最小单位

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后面自动处理为十六进制)

 int

编译器最优的处理能力

系统一整个周期,所能接受的最大处理单位,

32bit                            4B    int

16bit(单片机系统)   2B    int

long,short 

特殊长度的限制符

Unsigned,signed

无符号数:更多来表示数据(位运算中的右移操作,正负占位符能否被移动)

有符号数:来表示数字 

int a 

没有经过显式的声明,都被认为是signed有符号数

Float,double

浮点运算:就是小数

举例

0x10:表示0001 0000  ( 十六进制中的10就是16,刚好产生进位)

1.0怎么描述呢?

难道也是0001 0000?

浮点数和整数的表达方式完全不同

浮点型常量=>默认使用double型储存  (1.0后加上f,使用float来装载,省一半空间)

void

void用来占位,没有分配内存空间,可以后面做强制转换分配空间

在函数和变量中都起到占位声明的作用,没有什么定义

自定义数据类型

自定义=基本元素的集合

什么场景下会用上呢?

嵌入式Linux(四)—嵌入式C语言(杂项/数据类型关键字)_第2张图片

 看到四个地址0000-0004 4个字节

以此类推共有四个字节,那就需要有个自定义的数据集来包含这4个int去控制

引入了struct

Struct

元素之间的和

struct myabc{                 //只是声明新变量abc
    unsigned int a
    unsigned int b
   } ;

struct myabc mybuf;           //定义了一个myabc数据集

//括号中声明我需要组合的变量(顺序很重要)
//由于对应的是cpu中的数据,因此使用unsigned

Union

 相比Struct层层相叠,头尾相接

union共用起始地址

union myabc{     //声明
  char a;
  int b; 
};

union myabc mybuf;     //定义

enum 

可有可无——enumerate(列举)

被命名的整形常数的集合(打包常量)

enum abc{A,B,C};
等同于{A=0,B=A+1.C=B+1}

 那如果我定义enum abc a

又会得到什么呢,答案是a只会作为一个int

指向其中某个特定元素,甚至你人为给他一个常量定义,它也可以直接把这个常量存下来

typedef

数据类型的别名

int a;            a是一个int类型变量
typedef int a_t; a是一个int类型的外号(没有内存分配)
a_t mysize

xxx_t:typedef(关心物理实际意义)

你可能感兴趣的:(嵌入式,c语言,学习,开发语言,嵌入式硬件)