Primary:C(一、入门)
2019-08-20 本文已影响0人
Codeismylife
预编译头文件
#include <stdio.h>
// 预处理器指令, C 编译器在编译前要包含 stdio.h 文件
基本语法
C 程序由各种令牌组成,令牌可以是关键字、标识符、常量、字符串值,或者是一个符号.
数据类型
1.基本类型:整数类型和浮点类型
2.枚举类型:算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量
3.void类型:类型说明符 void 表明没有可用的值
4.派生类型:包括指针类型、数组类型、结构类型、共用体类型、函数类型
运算符:sizeof(int) //可获取对象或类型的存储字节大小
变量
char :通常是一个字节,这是一个整数类型
int: 对机器而言,整数的最自然的大小
float:单精度浮点值。单精度是这样的格式,1位符号,8位指数,23位小数
double:双精度浮点值。双精度是1位符号,11位指数,52位小数
void:表示类型缺失
C 中的变量定义
告诉编译器在何处创建变量的存储,以及如何创建变量的存储。变量定义指定一个数据类型
eg: int a;
常量
//整数常量
整数常量可以是十进制、八进制或十六进制的常量
前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制
后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)
//浮点常量
浮点常量由整数部分、小数点、小数部分和指数部分组成
带符号的指数是用 e 或 E 引入的
//字符常量
\r 回车
\n 换行
//定义常量
1.使用#define预处理器
2.使用 const 关键字
存储类
auto 存储类
//auto 存储类是所有局部变量默认的存储类 类似于JS中的局部变量
register存储类
//register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量。这意味着变量的最大尺寸等于寄存器的大小(通常是一个词),且不能对它应用一元的 '&' 运算符(因为它没有内存位置)
static 存储类
//static 修饰后,不会在每次调用时重置,必须得在同意文件中
extern 存储类
//extern 全局变量对所有的程序文件都是可见的
运算符
//1.算术运算符
+ - * / % ++ --
//2.关系运算符
== != > < <= >=
//3.逻辑运算符
&& || !
// 4.位运算符
&:都为1则为1
| :有一个是一则为1
^:两个位数同为1则为1
~:反码
<<:左移运算符
>>:右移运算符
//5.赋值运算符
= += -= *= /= %= <<= >>= &= ^= |=
//6.杂项运算符 ↦ sizeof & 三元
sizeof() 返回变量的大小
& 返回变量地址
*指向一个变量
? : 三元运算(条件表达式)
判断
//与JS基本相同
if else
switch case
三元
循环
//与JS基本相同
for
while
do ... while
//循环控制语句
break 结束循环
continue 结束本轮循环,开始下次迭代
goto 控制转移至标记语句
函数
strcat() 用来连接两个字符串
memcpy() 用来复制内存到另一个位置
函数包含:名称 函数体 参数 返回类型 后两者不是必须得
函数声明中,参数的名称并不重要,只有参数的类型是必需的
int max(int, int);
当程序调用函数时,程序控制权会转移给被调用的函数。被调用的函数执行已定义的任务,当函数的返回语句被执行时,或到达函数的结束括号时,会把程序控制权交还给主程序
作用域规则
全局 局部 形参 与JS相同 全局参数同名时有优先选择形参
//全局变量与局部变量在内存中的区别
全局变量保存在内存的全局存储区中,占用静态的存储单元;
局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元。
数组
#C数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素
声明数组、数组赋值、访问数组
enum(枚举)
//基本数据类型
可以在定义枚举类型时改变枚举元素的值:enum season {spring, summer=3, autumn, winter};
C 指针
//什么是指针?
指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址
&获取指针地址,*指针访问值
//NULL 指针
一个空的
函数指针与回调函数
#include <stdio.h>
int max(int x, int y)
{
return x > y ? x : y;
}
int main(void)
{
/* p 是函数指针 */
int (* p)(int, int) = & max; // &可以省略
int a, b, c, d;
printf("请输入三个数字:");
scanf("%d %d %d", & a, & b, & c);
/* 与直接调用函数等价,d = max(max(a, b), c) */
d = p(p(a, b), c);
printf("最大的数字是: %d\n", d);
return 0;
}
回调函数基本与JS一样!
字符串
在 C 语言中,字符串实际上是使用 null 字符 '\0' 终止的一维字符数组
strcpy(s1,s2) 复制2至1
strcat(s1,s2)连接至尾端
strlen(s) 返回字符串长度
strcmp(s1,s2)两者相同返回0,s1<s2返回小于0, s1>s2 返回大于 0
strchr(s1, ch)返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置
strstr(s1, s2);返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。
结构体
//为了定义结构,您必须使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型
位域
//有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如在存放一个开关量时,
//只有 0 和 1 两种状态,用 1 位二进位即可。为了节省存储空间,并使处理简便,C 语言又提供了一种数据结构,
//称为"位域"或"位段"。
输入 & 输出
printf() 输入
scanf()输出
getchar() 屏幕读取下一个可用的字符并返回
putchar() 字符输出到屏幕上,并返回相同的字符
C 文件读写
//打开文件
fopen( )
FILE *fopen( const char * 文件名, const char * 模式);
r //打开一个已有的文本文件,允许读取文件
a //打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
w//打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入
+r +a +w
//二进制文件
"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"
//关闭文件
int fclose( FILE *fp );
//如果成功关闭文件,fclose( ) 函数返回零,如果关闭文件时发生错误,函数返回 EOF
//EOF 是一个定义在头文件 stdio.h 中的常量
//写入文件
int fputc( int c, FILE *fp );
//函数 fputc() 把参数 c 的字符值写入到 fp 所指向的输出流中。如果写入成功,它会返回写入的字符,如果发生错误,则会返回 EOF。
真J儿烦,放弃了!考试能过就行