您的位置:首页 > 其它

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

2012-12-16 11:31 645 查看

位段(仅作理解)

位段(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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: