嵌入式开发之C基础学习笔记09--位段,枚举和文件操作

位段(仅作理解)

位段(bit-field):访问字节中到位到内设机制,可以访问单个未。这是C语言访问二进制位到两种方式到一种(另一种方式是位运算)
1)特点:
  .内存特别紧张时,可以把若干BOOL变量存入到一个字节
  .某些设备把编码信息传送到各个位
  .某些加密算法需要访问字节中的位
2)相对于位操作,位段能够增加更多的代码结构,可以提高效率
3)C语言的位段由结构体实现,每个位段是位段结构体中的成员,以位为单位来定义长度
4)与普通结构体相比,位段到使用也有一定到限制和细节问题。
如:不能取其地址,位段变量不能跨越数组边界,这段只能被声明为int或unsigned int类型等。另外,不同到机器对位段的成员到存储顺序是不一样到,这意味着使用位段就引入了对机器到依赖。

枚举

枚举:被命名的整型常量列表
常量在内存中不占用内存空间
1)每一个符号代表一个整数值
2)每一个符号的值是零
3)每一个符号到值都是其前导者的值加一
4)枚举表中到名字不是字符串
 enum color{black,white,blue,red=4,magenta,bronwn,gray=20,yellow};
 enum color c1;/*定义变量c1为color类型*/
 c1 = gray;
 printf("%s\n",c1); /*EROR!*/
 grep只是一个整型数值的名字,而非字符串
 要把枚举型翻译成字符串只能用*编程实现,如使用一个串数组,用枚举值做数组下表,或者使用switch()控制结构。因此,枚举常用于不产生这种转换到程序中(如定义编译器的符号表)


文件操作(不是十分重要)

在实际过程中,文件(尤其是磁盘文件)是至关重要到。编程编到最后,实际上就是玩文件和指针。不懂得文件操作,可以说就等于不懂得编程。因为现在所有的软件几乎都要对文件操作进行大量操作,而不是简单地对内存进行操作。
一,文件:在C中文件是一个逻辑概念,可以是外部设备(终端,打印机等),也可意是磁盘文件(记录在磁盘上到文件)。文件是一组相关数据的集合,通常被记录在外部设备上。从内容上看,文件不同与数组,无固定长度,不限制包括几种数据类型。每个文件都必须有一个文件名,OS借助于文件名进行数据的查找和组织等。


二,对文件到操作:
 -->写:将额外年间记录到外部设备上
 -->读:将外部文件调入内存,以便进行处理
 1.在标准化C语言,并没有把非缓冲IO系统融入到标准中,因为这些函数是多余到,而且非缓冲系统可能与支持C的某些环境无关。
 2.对于OS来说,不同设备文件的操作方式是有差别的,如磁盘文件可以随机存取,而终端设备文件则不行。为了避开这些细节问题,使程序能够以更容易更一致到方式操作文件,C语言建立了在文件基础上的又一层逻辑概念:流.在C中,当文件被打开时,就形成了一个流。所有的流都表现为同一种方式,程序也使用同一种方式操作所有的流。因此不用为不同的文件编写特殊的操作例程。
 3.流与文件:在C中,所有的流都是相同的,而文件却不同。流使得C以完全一致的方式操作各种设备文件,程序是对流进行操作而不是文件,流与某个特殊文件的对应是由操作系统维系着。


三,IO操作是通过调用C的库函数实现的,而不是通过关键字实现
例子一:
#include <stdio.h>
#include <stdlib.h>
void main()
{
/*定义一个文件指针*/
FILE *fp;
char ch,filename[10];
printf("please input the name of file:");
scanf("%s",filename);
if(fp=fopen(filename,"r")==NULL)
{
printf("Cannot open the file.\n");
exit(0);
}
fclose(fp);
}


例子二:
#include <stdio.h>
#include <stdlib.h>
void main()
{
/*定义一个文件指针*/
FILE *fp;
int i = 156;
long l = 99999L;
double d = 3.45;
if(fp=fopen("test","w")==NULL)
{
printf("Cannot open the file.\n");
exit(0);
}
fwrite(&i,sizeof(int),1,fp);
fwrite(&1,sizeof(long),1,fp);
fwrite(&d,sizeof(double),1,fp);
rewind(fp);


fread(&i,sizeof(int),1,fp);
fread(&1,sizeof(long),1,fp);
fread(&d,sizeof(double),1,fp);
fclose(fp);


}

转载于:https://my.oschina.net/wisdomperson/blog/96161

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值