C C语言中关键词,以及知识点复习
C语言学习
auto 局部变量(自动储存)
break 无条件退出程序最内层循环case switch语句中选择项char 单字节整型const 定义不可更改值的变量continue 中断本次循环,并转向下一次循环default switch语句中的默认选择项do 用于构成do.....while循环语句double 双精度浮点型else 构成if.....else选择程序结构enum 枚举extern 声明外部全局变量float 单精度浮点型for 构成for循环语句goto 跳到程序中指定的标签位置if 构成if....else选择结构int 整型long 长整型register 定义CPU内部寄存的变量return 用于返回函数的返回值short 短整型signed 有符号数 与基本整型类型结合使用sizeof 计算表达式或数据类型的占用字节数static 定义静态变量、函数struct 定义结构类型switch 构成switch选择结构typedef 重新定义数据类型union 联合类型unsigned 定义无符号数据 与基本整型类型结合使用void 定义任意类型指针void * , 无参数 , 无返回值等volatile 易失性变量while 用于构成do...while或while循环结构
#include "heard.h"
void heard1(int r){
printf("%d\n",r);
}
#ifndef heard_h
#define heard_h
#include <stdio.h>
void heard1(int r);
#endif /* heard_h */
/////////////////////////
#include <stdio.h>
#include "heee.h"
#include "heard.h"
int main(int argc, const char * argv[]) {
heard1();
int ee = hee1();
printf("\n%d",ee);
return ;
}
头文件调用
//共用体:共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。
union Data
{
int i;
float f;
char str[]; };
//,同一时间只能使用一个共用体,使用多个最后一个使用的无误之前的会错乱;
union Data date;//声明
date.i = ;
date.f = 22.22;
strcpy(date.str,"woshiyige");
print(“%d—%f—%s”,date.i,date.f,date.str); //结构体:相当于OC中的类,Swift中的类也是一个结构体(暂时这么理解) #include <stdio.h> struct Books
{ char title[];
char author[];
char subject[];
int bookid; }; void printBook(struct Books book);//函数声明 int main(int argc, const char * argv[]) { //声明
struct Books book1;
struct Books book2;
strcpy(book1.title,"zhonghua");
strcpy(book1.author, "xude");
book1.bookid = ; strcpy(book2.title,"zhongguo");
strcpy(book2.author, "nide");
book2.bookid = ; printBook(book1); return ;
} void printBook(struct Books book){ printf("book.title %s\n",book.title); printf("book.authoe %s\n",book.author); printf("book.bookid %d\n",book.bookid); } //位域:可以 定义类型的储存大小,节省不必要的内存开销
//类型说明符 位域名: 位域长度
struct wei{ int kai:;
int guan:;
unsigned a:;
unsigned :; //空域 从下一个单元 开始存放 };
void printBook(struct Books book);//函数声明 int main(int argc, const char * argv[]) { //声明位域
struct wei w;
w.a = ;
w.guan = ;//⚠️注意不要超过位域的大小 } Ttypedef
//C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字。下面的实例为单字节数字定义了一个术语 BYTE:
typedef unsigned char BYTE; int main(int argc, const char * argv[]) { // 在这个类型定义之后,标识符 BYTE 可作为类型 unsigned char 的缩写,例如:
BYTE b1, b2; //#define 是 C 指令,用于为各种数据类型定义别名,与 typedef 类似,但是它们有以下几点不同:
typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名,比如您可以定义 1 为 ONE。
typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的。
return ;
}
C 中文件的读写
C
//读写文件 txt,本地化数据
#include <stdio.h> int main(int argc, const char * argv[]) { //文件的读取
/*打开文件
您可以使用 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型 FILE 的一个对象,类型 FILE 包含了所有用来控制流的必要的信息。下面是这个函数调用的原型:
FILE *fopen( const char * filename, const char * mode );
在这里,filename 是字符串,用来命名文件,访问模式 mode 的值可以是下列值中的一个:
模式 描述
r 打开一个已有的文本文件,允许读取文件。
w 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。
a 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
r+ 打开一个文本文件,允许读写文件。
w+ 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
a+ 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。
如果处理的是二进制文件,则需使用下面的访问模式来取代上面的访问模式:
"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"
关闭文件
;
为了关闭文件,请使用 fclose( ) 函数。函数的原型如下:
int fclose( FILE *fp );*/ //lizi FILE * fp;
fp = fopen("/tmp/text.txt", "w+");//在tmp目录下创建text.txt 文件类型为w+ fprintf(fp, "This is testing for fprintff....\n");
fputs("123456\n", fp);//以上是两种不同的写入方法 fclose(fp);//关闭文件 FILE * pp;
pp = fopen("/tmp/tt.txt", "a+");
fprintf(pp, "woshiyigetianjiade");
fputs("woshidierge", pp); fclose(pp); FILE * yy;
yy = fopen("uu.txt", "w");
fprintf(yy, "yyyyyyyyyyyy");
fputs("ffffffffff", yy); fclose(yy); //文件等读取
//如果这个函数在读取最后一个字符之前就遇到一个换行符 '\n' 或文件的末尾 EOF,则只会返回读取到的字符,包括换行符。您也可以使用 int fscanf(FILE *fp, const char *format, ...) 函数来从文件中读取字符串,但是在遇到第一个空格字符时,它会停止读取 FILE * gg; //定义文件
char butff[];//char大小
gg = fopen("/tmp/text.txt", "r"); //获取文件 fscanf(gg, "%s",butff);
printf("1:%s\n",butff); // fscanf 输出 遇到空格会停止 读取 fgets(butff, , gg);
printf("2: %s",butff); fgets(butff, , gg); //进行文件读取一整行 遇到\n会停止
printf("3: %s\n",butff); /*输出
1:This
2: is testing for fprintff....
3: 123456
*/
fclose(gg);//关闭文件 return ;
}
C中 的预处理
//预处理
#include <stdio.h> #define shuchu(a) printf(#a)
#define liashuchu(a,b) printf(#a"haiyou"#b"zifudandu") void wenjian();
void yuchuli();
int main(int argc, const char * argv[]) { yuchuli();
//wenjian(); return ;
} void yuchuli(){ /*
所有的预处理器命令都是以井号(#)开头。它必须是第一个非空字符,为了增强可读性,预处理器指令应从第一列开始。下面列出了所有重要的预处理器指令:
指令 描述
#define 定义宏
#include 包含一个源代码文件
#undef 取消已定义的宏
#ifdef 如果宏已经定义,则返回真
#ifndef 如果宏没有定义,则返回真
#if 如果给定条件为真,则编译下面代码
#else #if 的替代方案
#elif 如果前面的 #if 给定条件不为真,当前条件为真,则编译下面代码
#endif 结束一个 #if……#else 条件编译块
#error 当遇到标准错误时,输出错误消息
#pragma 使用标准化方法,向编译器发布特殊的命令到编译器中 预定义宏
ANSI C 定义了许多宏。在编程中您可以使用这些宏,但是不同直接修改这些预定义的宏。
宏 描述
__DATE__ 当前日期,一个以 "MMM DD YYYY" 格式表示的字符常量。
__TIME__ 当前时间,一个以 "HH:MM:SS" 格式表示的字符常量。
__FILE__ 这会包含当前文件名,一个字符串常量。
__LINE__ 这会包含当前行号,一个十进制常量。
__STDC__ 当编译器以 ANSI 标准编译时,则定义为 1。
*/ /* 预处理器运算符
C 预处理器提供了下列的运算符来帮助您创建宏:
宏延续运算符(\)
一个宏通常写在一个单行上。但是如果宏太长,一个单行容纳不下,则使用宏延续运算符(\)。例如:
#define message_for(a, b) \
printf(#a " and " #b ": We love you!\n")
字符串常量化运算符(#)
在宏定义中,当需要把一个宏的参数转换为字符串常量时,则使用字符串常量化运算符(#)。在宏中使用的该运算符有一个特定的参数或参数列表。例如:
#include <stdio.h> #define message_for(a, b) \
printf(#a " and " #b ": We love you!\n") int main(void)
{
message_for(Carole, Debra);
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
Carole and Debra: We love you!*/
shuchu(); liashuchu(jdfsjdf, dsadfd); printf("日期 %s\n",__DATE__);
printf("时间 %s\n",__TIME__); printf("文件名: %s\n",__FILE__);
printf("行号:%d\n",__LINE__);
printf("ANSI : %d\n",__STDC__); /*
日期 Jun 16 2017
时间 14:28:32
文件名: /Users/yurong/Documents/代码/C/C练习/C练习/main.c
行号:55
ANSI : 1
*/ }
C中的递归
#include <stdio.h>
double faction(unsigned int i);
int main(int argc, const char * argv[]) {
//递归 C 语言支持递归,即一个函数可以调用其自身。但在使用递归时,程序员需要注意定义一个从函数退出的条件,否则会进入死循环。\
与直接的语句(如while循环)相比,递归函数会耗费更多的运行时间,并且要占用大量的栈空间。递归函数每次调用自身时,都需要把它的状态存到栈中,以便在它调用完自身后,程序可以返回到它原来的状态。未经精心设计的递归函数总是会带来麻烦。
//下面的实例使用递归函数计算一个给定的数的阶乘:
int i = ;
printf("%d 的阶乘 = %f\n",i,faction(i));
return ;
}
double faction(unsigned int i){
if (i<=) {
return ;
}
return i* faction(i-);
}
C C语言中关键词,以及知识点复习的更多相关文章
- Java语言中的这些知识点有没有用过,工作中有没有入过这些坑?
在Java语言中,有一些相对生僻的知识,平时用的机会可能不是很多,但如果不了解不掌握这些知识点的话,也可能会掉入陷阱之中,今天我们就来初步梳理一下: 1. goto是java语言中的关键字. &quo ...
- C语言中关键词static的用法与作用域
一.面向过程设计中的static 转载:http://blog.csdn.net/celerylxq/article/details/6160499 1.静态全局变量 在全局变量前,加上关键字stat ...
- C语言知识点复习梳理
C语言知识点复习梳理 C语言的知识点讲完了,接下来就是做一下整理与总结,然后就会进入其他知识的学习. 本文目录如下: 基础知识. 顺序程序设计. 数据类型. 标准输入输出. 进制转换. 选择结构. 循 ...
- Hybrid App 应用开发中 9 个必备知识点复习(WebView / 调试 等)
前言 我们大前端团队内部 ?每周一练 的知识复习计划继续加油,本篇文章是 <Hybrid APP 混合应用专题> 主题的第二期和第三期的合集. 这一期共整理了 10 个问题,和相应的参考答 ...
- 知识点回顾——C语言知识点复习梳理,看看你是不是都完全掌握了
前段时间,我分享了关于C语言的一些必备知识点,感兴趣的朋友可以查看我的往期文章,或是关注公众号c语言进阶之路,查看次条文章,或搜索关键字"编程小白基础必备",就能查看相关文章了. ...
- [C语言]易错知识点、小知识点复习(1)
1. 计算机只能识别由0和1组成的二进制指令,需要将用高级语言(如C.C++)编写的源程序(.c..cpp)编译成二进制目标文件(.obj).一个程序可以根据需要写在不同的文件里,编译是以文件为单位进 ...
- Spring知识点复习
Spring知识点复习 一.专业术语 侵入式设计 引入框架,对现有的类的结构有影响,即需要实现或继承某些特定类.如:Struts框架 非侵入式设计 引入框架,对现有的类结构没有影响.如:Hiberna ...
- PHP面向对象中的重要知识点(三)
1. namespace: 和C++中的名字空间很像,作用也一样,都是为了避免在引用较多第三方库时而带来的名字冲突问题.通过名字空间,即便两个class的名称相同,但是因为位于不同的名字空间内,他们仍 ...
- c语言学习之基础知识点介绍(二):格式化控制符和变量的补充
上节简单介绍了c语言中的一些基础知识点,本节将对之前介绍的不够详细的知识点进行补充. 格式化控制符的消息介绍: %d的其他控制符: 1.%md:m代表这个整数位占用多少位,m是一个整数.实际数字不足的 ...
随机推荐
- Nodejs学习笔记(十六)--- Pomelo介绍&入门
目录 前言&介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json 配置servers.json ...
- Ani动态光标格式解析
数据结构: Ani文件中的数据是按区段存放的,区段数据结构如下: 标识符(4字节ASCII),数据长度(一个DWORD),数据 按照此规则来看Ani文件,文件起始12字节可以理解为标准文件头,除数据长 ...
- 从MVC到Ajax再到前后端分离的思考
前言 一位小妹去面试前端,前端leader问了"什么是ajax?",答:"接收后台的数据,然后然后自己填充和渲染样式":一位小哥去面试后台,技术经理问了&quo ...
- 关于RDLC报表打印预览界面显示页码问号的问题
原来在reportview中,vs2010新增了一个属性,pageCountMode,默认的Estimate,提供估算的页数,另外一个属性Actual,提供实际的页数.
- Nginx配置优化及深入讲解,大家可以听一下
随着访问量的不断增加,需要对Nginx和内核做相应的优化来满足高并发用户的访问,那下面在单台Nginx服务器来优化相关参数. 1) Nginx.conf配置优化: worker_proce ...
- centos7 简单搭建lnmp环境
1:查看环境: 1 2 [root@10-4-14-168 html]# cat /etc/redhat-release CentOS release 6.5 (Final) 2:关掉防火墙 1 [r ...
- 使用vee-validate表单插件是如何设置中文提示?
最近在写vue表单验证的时候,在网上找到一款不错的插件vee-validate,在使用的过程中发现配置不了中文提示,这就很苦恼了,基本上网上的配置办法我都看过,都是有问题的,比如这种 import z ...
- javascript设计模式——职责链模式
前面的话 职责链模式的定义是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止.职责链模式的名字非常形象,一 ...
- 自己动手写http服务器——处理http连接(二)
关于http报文格式请看这篇文章 //http_conn.h #ifndef HTTPCONNECTION_H #define HTTPCONNECTION_H #include <unistd ...
- MySQL数据库数据信息迁移
环境内核信息: [root@zabbix-01 ~]# uname -a Linux lodboyedu-01 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:2 ...