STM32学习笔记之C语言篇

【unsigned】

1、rewind(FILE *):回到文件领头处
2、fprintf(), fscanf(), fgets(), fputs()
(1)、fprintf(<#FILE *restrict#>, <#const char *restrict, ...#>) //return 成功写入个数
(2)、fscanf(<#FILE *restrict#>, <#const char *restrict, ...#>) //return 成功读取个数
(3)、fgets(<#char *restrict#>, <#int#>, <#FILE *#>) //蒙受EOF, return NULL; 不然, return 传递给它的地址值
(4)、fputs(<#const char *restrict#>, <#FILE *restrict#>) //成功输入, 重临非负整数; 不然赶回EOF
3、command ? 注释xcode代码
4、fseek(), ftell()完成倒序读取文件内容
fseek(fp, 0L , SEEK_END); //定位到文件结尾
last = ftell(fp);
for(count = 1L; count <= last; count ){
fseek(fp, -count, SEEK_END); //回退
ch = getc(fp);
if (ch == 'r') {
putchar('n');
}else{
putchar(ch);
}
}
5、fseek()参数
(1)第八个参数为FILE指针
(2)首个参数为偏移量,表示从起源起头要活动的间距,必得是二个Long类型的值,可感觉正(前移)、负(后移)、零(保持不动)
(3)第八个参数为形式,用来标记源点。SEEK_SET 文件领头,SEEK_CURubicon当前岗位, SEEK_END文件结尾
(4)假诺寻常,重回值为0,假如有错误,再次回到值为-1
6、Ftel()函数
(1)Long类型,再次来到文件的一时一刻任务,再次回到距文件初步处的字节数亩来规定文件的职责。文件的率先个字节到文件开端处的相距是字节0,适用于以二进制格局展开的文书
7、fgetpos(), fsetpost()函数
(1)用以管理不小文件的稳固函数,采纳风度翩翩种名叫fpost_t (file position type,文件定位类型)
(2)int fgetpos(FILE * restrict stream, fpost_t * restrict pos); 被调用时,该函数在pos所指的职位放置二个fpost_t值,那么些值描述了文本中的叁个任务,假设成功,函数重回0,不然重返三个非零值
(3)int fsetpos(FILE * stream, const fpost_t * pos);被调用时,该函数使用pos指向的极其fpos_t值设定文件指针指向该值所提醒的职位,假若成功,函数重返0,不然再次来到几个非零值
8、ungetc()函数
(1)int ungetc(int c, FILE *fp);
(2)将c制定的字符放回输入流中,假如向输入流中翻入了一个字符,下二次调用专门的学问输入函数就可以读入那些字符。
(3)ANSIC标保证险每便只会放回三个字符。假若三个c完毕允许将风度翩翩行里的八个字符放回输入流,那么些输入函数就能够以放回时相反的顺序来读入
9、fflush()函数
(1)int fflush(FILE *fp);
(2)将缓冲区任何未写的数码发送到一个由fp内定的输出文件中区,这些进度称为刷新缓冲区
(3)若是fp是贰个空指针,将刷新掉全部的输出缓冲
(4)对于四个输入流使用fflush()函数的效果未有定义,只要近来二次使用流的操作不是输入操作,就足以对三个更新流(任何读-写格局的流卡塔 尔(阿拉伯语:قطر‎使用这些函数
10、setvbuf()函数
(1)int setvbuf(FILE * restrict fp, char * restrict buf, int mode, size_t size);
(2)建设构造叁个供标准I/O函数使用的替换缓冲区,张开文件之后,在未有对流实行此外操作在此以前,能够调用这几个函数
(3)由指针fp来钦赐流,buf指向将选取的存款和储蓄区,借使buf的值不是NULL,就非得创设那一个缓冲区
(4)size变量为setvbuf()函数制定数组的大小
(5)mode将从下列选项中接受:
①_IOFBF,完全缓冲(缓冲区满的时候刷新卡塔 尔(英语:State of Qatar)
②_IOLBF,行缓冲(缓冲区满的时候依旧三个新行写入的时候卡塔尔国
③_IONBF,无缓冲,若是成功实施,函数会回去零值,不然重临叁个非零值
11、fwrite()函数
(1)要是把数据存款和储蓄在一个接纳与程序有所雷同表示方法的文件中,就城数据以二进制方式储存
(2)size_t fwrite(const void * restrict ptr, size_t size, size_t nmemb, FILE * restrict fp);
(3)指针ptr是要写入的数据块的位置
(4)size表示要写入的数据块的大大小小(以字节为单位卡塔尔国
(5)nmemb表示数据块的多寡
(6)fp钦定要写入的文书
(7)重临成功写入的类型数,平常情形下,与Nmemb相等;若有写入错误,再次来到值就能够小与nmemb
12、fread()函数
(1)size_t fread(void * restrict ptr, size_t size, size_t nmemb, FILE * restrict fp);
(2)ptr为读入文件数量的内部存款和储蓄器存款和储蓄地方
(3)fp钦点要读取的文书
(4)使用fread()函数来读取通过fwrite()写入的文件数量
(5)重回成功读入的种类数,正常情形下,与nmemb相等,读取错误的话,重回值会小于nmemb
13、综合使用
FILE *fa, *fs;
int files = 0;
char file_app[SLEN];
char file_src[SLEN];
puts("输入要追加内容的公文名:");
gets(file_app);
if ((fa = fopen(file_app, "a")) != NULL)
{
fprintf(stderr, "无法开辟文件 %s", file_app);
exit(2);
}
if (setvbuf(fa, NULL, _IOFBF, BUFSIZE) != 0)
{
fputs("不能够创制输出缓冲区", stderr);
exit(3);
}
puts("输入要加多内容的文书名(输入空行退出):");
while (gets(file_src) && file_src[0] != '\0')
{
if (strcmp(file_app, file_src) == 0)
{
fputs("无法增至相通的文书", stderr);
}
else if((fs = fopen(file_src, "r")) == NULL)
{
fprintf(stderr, "无法开发源文件");
}
else
{
if(setvbuf(fs, NULL, _IOFBF, BUFSIZE) != 0)
{
fputs("不能够创造源文件缓冲区", stderr);
continue;
}
append(fs, fa);
if(ferror(fs) != 0)
fprintf(stderr, "读取源文件%s时发生错误!", file_src);
if(ferror(fa) != 0) {
fprintf(stderr, "写入文件时%s产生错误", file_app);
}
fclose(fs);
files ;
printf("FILE %s appended.n", file_src);
puts("下一个文件:(输入空行退出)");
}
}
printf("Done.%d files appended.n", files);
fclose(fa);
return 0;
}
void append(FILE * source, FILE * dest)
{
size_t bytes;
static char temp[BUFSIZE];
while ((bytes = fread(temp, sizeof(char), BUFSIZE, source)) > 0) {
fwrite(temp, sizeof(char), BUFSIZE, dest);
}
}

技巧类博客

CSDN 月光博客

这些网址不错

十三人系统中二个int能储存的数码的范围为-32768~32767,而unsigned能积攒的数据范围则是0~65535。由于在Computer中,整数是以补码格局存放的。依照最高位的两样,假若是1,有暗记数的话正是负数;要是是无符号数,则都在表达为正数。其它,unsigned若省略后一个至关首要字,大多数编译器都会以为是unsigned int。

14、feof()函数
(1)要是近期一次输入调用检验到文件结尾,feof()函数再次回到三个非零值,不然重返零值
15、ferror()函数
(2)若是爆发读写错误,ferror()函数重临贰个非零值,不然再次回到零值
16、结构证明
(1)struct 构造名{ //在main函数之上定义
平日品种 类型名[];
平日档期的顺序 类型名[];
}; //这里有分号
(2)注解布局变量:struct 结构名 变量名;
(3)最早化构造:
sturcc 结构名 变量名 = {
类型1的值,
类型2的值,
类型3的值
}; //这里有分号
(4)构造的创立初叶化项目:
struct 结构名 变量名 = {
.构造里的分子名 = 值;
.构造里的分子名 = 值;
}; //这里有分号
17、布局指针
(1)struct 结构名 * 指针名;
(2)构造指针名 = &构造变量名; //一个布局的名字不是该组织的地点
(3)使用布局指针访问成员: 布局指针名->成员变量名; (协会指针名).成员变量名;
(4)函数参数使用构造地址:double sum(const struct funds
money);
(5)函数参数使用布局: double sum(struct funds moolah);
18、结构
(1)能够把七个同样构造的变量相互赋值
(2)能够视作函数再次来到值
(3)把指针作为参数的独特之处:
①可工作在较早的C上,也得以在较新的C上,实行进度快
②只须传递二个单个地址
缺陷:缺乏对数据的掩护
(4)把结果作为参数字传送递的优点是函数处理的时原始数据的副本,比直接管理原始数据安全
(5)在构造中积攒字符串,请使用字符数组成员。用字符指针存储,字符存款和储蓄的内存空间不在构造中
19、复合文字和构造
(1) (struct 构造名){构造变量值};
20、伸缩数字成员
(1)伸缩型数组成员必需是最终叁个数组成员
(2)构造中必得至稀少三个其余成员
(3)伸缩型数组就如平时数组相似被声称,除了它的方括号内是空的
(4)使用malloc()函数莱维伸缩数组成员分配内部存款和储蓄器
21、将组织保持到文件
(1)使用fwrite()函数保存到文件
(2)使用fread()函数从文件读取
22、联合
(1)联合是二个能在同叁个存款和储蓄空间里(但不相同期卡塔尔国存款和储蓄分歧种类数据的数据类型。
(2)union 联合变量名{
常备档次 成员名;
习认为常等级次序 成员名;
}; //这里有分号
(3)把多少个同步起头化为同类别的另三个一块 union 联合名 联合变量名 = 联合变量名2;
(4)起先化联合的首先个因素 union 联合名 联合变量名 = {值};
(5)拟订最初化项目 union 联合名 联合变量名 = {.成员名=值, .成员名=值};
(6)点运算符表示正在接受哪类数据类型,在同时内只好存款和储蓄二个值,就算有丰硕的空中,也不能够并且保留一个char类型和贰个int类型的值,由你承受记住当前保留在同步中的数据的连串
23、直接成员运算符 ->
(1)与针对布局或联合签字的指针一齐利用,用来指明构造或同台的积极分子
24、枚举类型
(1)enum 枚举名{成员名,成员名};
(2)从技能上讲,它们是int类型的常量
(3)暗许值为 enum kids{nippy, slats, skippy, liz}; 列表中的常量被内定为0, 1, 2
(4)钦赐值为enum feline{low = 100, lynx = 500, heigh = 贰零零叁0};
(5)混合赋值:enum feline{cate, lynx = 10, puma, tiger}; cat的值为0, lynx, puma, tiger的值为10, 11, 12
25、typedef
(1)与#define差异,typedef给出的号子名称只限于对品种,并非对值
(2)typedef的解释由编写翻译器,而不是预微处理机推行
(3)即使它的界定有限,但在其受限范围内,typedef比#define更灵活
(4)typedef int MyType; //接下来可用MyType来声称变量了
(5)功能于决计于typedef语句所在的职责,函数内部正是有的的,函数外界就是大局的
(6)size_t是各平台用typedef阐明的变量
(7)对组织选取typedef,typedef struct complex{float real; float imag;} COMPLEX;//能够运用处目COMPLEX替代struct complex来代表复数
26、奇特的宣示
(1) 表示二个指南针,()表示一个函数, []代表四个数组
(2)允许使用多于1个的修饰符
①int board[8][8]; //int数组的数组
②int **ptr; //指向int的指针的指针
③int
risk[10]; //具备13个因素的数组,种种成分都以八个针对int的指针
④int (rusks)[10]; //四个指南针,指向具备10各因素的int数组
⑤int
oof[3][4]; //几个3×4的数组,每种成分是贰个对准int的指针
⑥int ( uuf)[3][4]; //二个指针,指向3×4的int数组
⑦int (
uof[3])[4]; //三个具备3各要素的数组,各种成分都是二个针对性具有4个成分的int数组的指针
(3)修饰符的次第差距:
①意味着八个数组的[]和象征一个函数的()具备同等的优先级,这么些优先级高于直接运算符的开始时期级。intrisks[10];//那就表示那么些生命使得risks是三个指针数组并不是三个针对数组的指针
②[]和()都以从左到右举办组合的,int goods[12][50];//这几个宣称使得goods是一个由拾贰个有着50各int值的数组构成的数组,并不是由四二十个颇负十二个int值的数组构成的数组
③[]和()具备相符的优先级,但鉴于它们是从左到右结合的,int ( rusk)[10];//那个宣称使得rusks是多个指向性具备拾二个int值的数组的指针
27、指向函数的指针
(1)void (
pf)(char *); //pf是一个针对性函数的指针
(2)void *pf(char ); //pf是回到一个指针的函数
(3)使用指向函数的指针来做客函数
①(
pf)(参数);
② pf(参数);
28、c的位操作
(1)位运算符:
①按位取反:~
②按位与:&
③按位或:|
④按位异或:^
(2)移位运算符
①左移:<<
②右移:>>
(3)位字段:
struct 字段名{
unsigned int autfd:1;
unsigned int bldfc:1;
unsigned int undln:1;
} 字段变量名;
(2)若是所注解的总位数超越八个unsigned int大小,那将会使用下二个unsigned int存款和储蓄地点,不允许三个字段赶过五个unsigned int之间的边际
(3)编写翻译器自动地移动二个那样的字段定义,使字段按unsigned int边界对其,发生这种处境时,会在第三个unsigned int中留下一个未命名的洞
(4)能够选取未命名的字段宽度"填充"未命名的洞,使三个上涨的幅度为0的未命名的字段倒逼下四个字段与下三个偏分头对齐

uint8_t 什么意思

uint8_t,uint16_t,uint32_t等都不是怎样新的数据类型,它们只是接受typedef给项目起的别称,新瓶装老酒的把戏。然而,不要小看了typedef,它对于你代码的维护会有很好的信守。比方C中未有bool,于是在二个软件中,一些程序猿使用int,一些程序员使用short,会比较散乱,最棒就是用一个typedef来定义typedef char bool;经常的话,三个C的工程中分明要做一些那上边的做事,因为你会涉嫌到跨平台,分歧的阳台会有不一样的字长,所以接受预编译和typedef能够使你最有效的有限扶植您的代码。为了顾客的便利,C99规范的C语言硬件为大家定义了那些体系,大家放心使用就足以了。

遵照posix标准,平日整形对应的*_t类型为:

1字节uint8_t

2字节uint16_t

4字节uint32_t

8字节uint64_t

typedef unsigned          char uint8_t;

typedef unsigned short    int uint16_t;

typedef unsigned          int uint32_t;

typedef unsigned      __int64 uint64_t;

 

在C语言中unsigned的意义

unsigned char是无符号字节型,char类型变量的深浅平日为1个字节(1字节=8个位卡塔尔国,且归属整型。整型的每黄金时代种都有无符号(unsigned卡塔尔和有记号(signed卡塔 尔(阿拉伯语:قطر‎二种档次(float和double总是带符号的卡塔 尔(阿拉伯语:قطر‎,在暗中认可情状下表明的整型变量都是有标识的种类(char有一点点极度卡塔尔,假诺需表明无符号类型的话就须求在类型前拉长unsigned。无符号版本和有标识版本的分裂正是无符号类型能保存2倍于有暗记类型的多寡,举例十三个人系统中三个int能积存的数量的限定为-32768~32767,而unsigned能储存的数据范围则是0~65535。

整型变量unsigned即unsigned int,在Turbo C长度为16(即0~65535卡塔 尔(阿拉伯语:قطر‎,

malloc函数是分配内部存款和储蓄器空间函数,参数是待分配的连串在内部存款和储蓄器中所占的字节数

【const】

c语言中static 用法

用static申明局地变量,使其变为静态存款和储蓄情势,成效域不改变;用static注明外界变量,其自个儿就是静态变量,那只会变动其总是形式,使其只在本文件之中有效,而别的文件不可三翻五次或援用该变量。

static效率于函数:e.g.: static void func(void);

接受static用于函数定义时,对函数的接连几天格局发出震慑,使得函数只在本文件之中有效,对任何文件是不可以见到的。那样的函数又叫作静态函数。使用静态函数的好处是,不用忧虑与其余文件的同名函数发生苦恼,别的也是对函数本人的风流倜傥种爱惜体制。

如若想要别的文件能够征引本地函数,则要在函数定义时使用首要字extern,表示该函数是表面函数,可供别的文件调用。其它在要引用别的文件中定义的外部函数的文件中,使用extern证明要用的表面函数就能够。

static 和 extern格格不入。

用static注脚局部变量,使其产生静态存款和储蓄方式,功效域不改变;用static注解外界变量,其自己就是静态变量,那只会变动其总是方式,使其只在本文件之中有效,而其余文件不可再三再四或引用该变量。

效率于函数:

应用static用于函数定义时,对函数的接连格局爆发影响,使得函数只在本文件之中有效,对其余文件是不可知的。这样的函数又叫作静态函数。使用静态函数的裨益是,不用顾虑与任何文件的同名函数发生干扰,别的也是对函数自个儿的生龙活虎种敬重体制。

万黄金时代想要其余文件可以援用本地函数,则要在函数定义时行使首要字extern,表示该函数是外界函数,可供其余文件调用。其它在要引用其余文件中定义的外表函数的文本中,使用extern注解要用的外界函数就能够。

const修饰的数据类型是指常类型,常类型的变量或对象的值是不能够被更新的

 

【struct和typedef struct】

struct和typedef struct通透到底领略了

【uint32_t】

uint32_t是叁12人无符号整形,在头文件中应有是typedef unsigned int uint32_t;

status为int的一个同义词

 

【void *】

如果函数的参数能够是随意档期的顺序指针,那么应注解其参数为void * ;

 

【::】

全局意义域符;类外申明部分

 

【sp<Death>&】

sp:智能指针

&:地址

 

【*】

BpBinder *proxy              :*表示指针

IPCThreadState* self

本文由星彩网app下载发布于计算机编程,转载请注明出处:STM32学习笔记之C语言篇

TAG标签: 星彩网app下载
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。