程序结构
- 预处理指令cpp
- 函数
- 变量
- 语句&表达式
- 注释
基本语法
- token, C 程序由各种令牌组成,令牌可以是关键字、标识符、常量、字符串值,或者是一个符号。
- 注释 /* 我的第一个 C 程序 */
数据类型
算术类型
整数型
char(1 Byte) , unsigned char int(4), unsigned int short(2), unsigned short long(4), unsigned long
浮点型
float(4), double(8), long double(16)
- void
- 派生类型
- 指针
- 数组
- 结构体
- 共用体
- 函数
变量
没什么好说的
常量
- #define 预处理器。
- 使用 const 关键字。
存储类
- auto 所有局部变量默认的存储类
{
int mount;
auto int month;
}
- register 存储类用于定义存储在寄存器中,变量的最大尺寸等于寄存器的大小
{
register int miles;
}
static 存储类指示编译器在程序的生命周期内保持局部变量的存在,也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内
extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的; extern 是用来在另一个文件中声明一个全局变量或函数
运算符
判断
循环
函数
数组
double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};
指针
一个变量,其值为另一个变量的地址,即,内存位置的直接地址
字符串
strcpy(s1, s2);
strcat(s1, s2);
strlen(s1);
strcmp(s1, s2); 比较
strchr(s1, ch); ch 出现的index
strstr(s1, s2); s2 第一次出现的位置。
结构体
存储不同类型的数据项,成员访问运算符(.)
struct Books { char title[50]; char author[50]; char subject[100]; int book_id; } book;
指向结构体的指针
结构变量的地址
struct_pointer = &Book1;
访问结构体的成员 ,必须使用 -> 运算符
void printBook( struct Books *book ) { printf( "Book title : %s\n", book->title); printf( "Book author : %s\n", book->author); printf( "Book subject : %s\n", book->subject); printf( "Book book_id : %d\n", book->book_id); }
位域
把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数
struct bs{ int a:8; int b:2; int c:6; }data;
共用体
- 允许您在相同的内存位置存储不同的数据类型,
- 共用体占用的内存应足够存储共用体中最大的成员
为了所有的成员都能完好输出,因为同一时间只用到一个成员
union Data { int i; float f; char str[20]; } data;
typedef
为类型取一个新的名字
typedef unsigned char BYTE;
标识符 BYTE 可作为类型 unsigned char 的缩写
输入输出
int scanf(const char *format, …) 函数
用于从标准输入(键盘)读取并格式化
int printf(const char *format, …) 函数
发送格式化输出到标准输出(屏幕)。
int getchar(void) 函数
从屏幕读取下一个可用的字符,并把它返回为一个整数
int putchar(int c) 函数
把字符输出到屏幕上,并返回相同的字符
char *gets(char *s) 函数
从 stdin 读取一行到 s 所指向的缓冲区,直到一个终止符或 EOF
int puts(const char *s) 函数
把字符串 s 和一个尾随的换行符写入到 stdout。
文件读写
打开文件
fp = fopen("/tmp/test.txt", "w+");
关闭文件
fclose(fp);
写入文件
fputs("This is testing for fputs...\n", fp); fprintf(fp, "This is testing for fprintf...\n"); 也可以使用 int fprintf(FILE *fp,const char *format, ...) 函数来写把一个字符串写入到文件中
读取文件
fscanf(fp, "%s", buff); printf("1 : %s\n", buff ); fgets(buff, 255, (FILE*)fp); printf("2: %s\n", buff );
二进制
size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file); size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);
预处理器
#define 定义宏
#include 包含一个源代码文件
#undef 取消已定义的宏
#ifdef 如果宏已经定义,则返回真
#ifndef 如果宏没有定义,则返回真
#if 如果给定条件为真,则编译下面代码
#else #if 的替代方案
#elif 如果前面的 #if 给定条件不为真,当前条件为真,则编译下面代码
#endif 结束一个 #if……#else 条件编译块
#error 当遇到标准错误时,输出错误消息
#pragma 使用标准化方法,向编译器发布特殊的命令到编译器中
错误处理
errno、perror() 和 strerror()
可变参数
http://www.runoob.com/cprogramming/c-variable-arguments.html
内存管理
void *calloc(int num, int size);
该函数分配一个带有 num 个元素的数组,每个元素的大小为 size 字节。
void free(void *address);
该函数释放 address 所指向的h内存块。
void *malloc(int num);
该函数分配一个 num 字节的数组,并把它们进行初始化。
void *realloc(void *address, int newsize);
该函数重新分配内存,把内存扩展到 newsize。
主要参考菜鸟教程:
http://www.runoob.com/cprogramming/c-data-types.html