做了三年的FPGA了,感慨良多。最大的失误是没有做好一个系统的记录。我的C旅程即将开始,一定要做一个系统的记录。学了两周的c,写了一个简单学习总结
C程序主要包含5部分
预处理指令(通过#标识)
函数
变量
语句&表达式
注释(//,或/* */)
基本类型占用空间:
char : 1个字节
int : 4个字节
float : 4个字节
double : 8个字节
关键字(变量)
int :整形变量或函数
float : 单精度浮点
double : 双精度浮点
char : 字符变量或函数返回类型
#define : 使用预处理器定义常量
const : 定义常量
auto : 自动变量(只能用在函数内,只能修饰局部变量)
extern : 变量或函数是在其他文件或本文件其他文章定义(引用一个全局变量时,用它做声明,多用于多个文件共用相同的全局变量或函数)
register : 寄存器变量
sizeof : 计算数据类型长度
static : 静态变量(同一个文件内,值不变)
typedef : 使用该关键字可以为类型取一个新的名字;包括结构体,可以重新给新的命名
字符常量
\\ : \字符
\' : '字符
\" : "字符
\? : ?字符
\b : 退格
\n : 换行
\r :回车
\t : 水平制表符
\v : 垂直制表符
\ooo : 一到三位八进制数
\xhh :一个或多个十六进制数
运算符
算术运算符 : + - * / % ++ --
关系运算符 : == != > < >= <=
逻辑运算符 : && || !
位运算符 : & | ^
赋值运算符 : = += -= *= /= %= <<= >>= &= ^= |=
其余 : &(返回地址); *(返回一个数); sizeof()(返回变量带大小); ?:(条件表达式)
判断语句
if语句
if...else 语句
if嵌套语句
switch语句:
{
case 1 : 语句 break;
...
default : break;
}
switch嵌套语句
循环语句
while循环 (先判断后循环,为真进入循环);
for循环 (初值,循环条件,执行条件);
do...while (先循环,后判断,为真继续循环);
break (终止循环,继续执行下一条语句);
continus (对循环体有效,停止本次循环,重新开始);
goto (无条件转移);
数组
1,定义多维数组;
2,传递数组到函数三种方法:通过指针,通过数组名包含数字大小,不包含数组大小;
3,从函数返回数组,只能通过返回指针的方式返回,函数定义为指针函数; 返回的是不带索引的数组名(int r[10]; return r;);
4,指向数组的指针,通过不带索引的数组名来指向数组中的一个元素的指针(int b[10]; int *p; p=b;(实际就等于*p=b[0]; *(p+1)实际对于b[1];))
枚举
定义1: enum 枚举类型 {元素1,元素2,... }; (不定义枚举变量,后面使用的时候再定义) enum 枚举类型 枚举变量;
定义2: enum 枚举类型 {元素1,元素2,... } 枚举变量;
定义3: enum {元素1,元素2,...} 枚举变量; (省略枚举类型)
指针
1,指针定义(*p(指向地址p的数据用*p表示));
2,指针的算术运算
{
int d[6];
int *p; //定义数组
for(p=d;p<&d[6];p++) //将指针指向数组的最后一个地址,指针递增;
printf("addr=%p,data=%d",p,*p);
}
3,指针数组
{
int d[3];
int *p[3];//定义的指针数组
int i=0;
for(i=0;i<3;i++)
{
p[i]=&d[i];//将指针指向数组d;
printf("i=%d,*p=%d"i,p[i]);
}
}
4,指向指针的指针(int d; int *p; int **pr; pr=&p;p=&d);
5,传递指针给函数,只需声明函数的形参为指针类型就可以;传入函数的时候穿地址;
6,从函数返回指针,声明函数为指针函数;如上函数返回数组相同;
字符串
1,字符串定义:char str[6]字符串最后一个地址默认放到是'\0',不可改变;
2,字符串相关函数
(1) strcpy(s1,s2) : 将字符串s2复制到s1;
(2) strcat(s1,s2) : 将字符串s2接到s1末尾;
(3) strlen(s1) : 返回字符串长度;
(4) strcmp(s1,s2) : 字符串比较,相同为0,s1大返回大于0,s1小返回小于0
结构体
1,结构体主要包括四部分:struct 标签{ 变量定义列表... }结构变量;
2,定义一个结构体:struct, 标签, 结构变量最少出现两部分;
3,也可以用typedef创建新类型结构体;
4,访问结构体可用 访问运算符(.): 结构变量.变量1;
5,结构体作为函数参数传递,将结构变量传递给参数即可;
6,指向结构的指针,需要用->;
共用体i
1,定义: 与结构体类似,定义了一个新的数据类型;主要包括四部分;
2,访问共用体的方式与结构图类似;
输入或输出
1,标准输入输出为:stdin-键盘,stdout-屏幕;
2,getchar()和putchar();分别为从键盘取一个字符或输出一个字符到屏幕;
3,gets()和puts;分别为从键盘取一个字符串,输出一个字符串到屏幕;
4,scanf()和printf();输入,输出;
文件读写
打开文件: FILE *fopen("filename","mode(r,w,a,r+,w+,a+)");
关闭文件: fclose(fp);
写入文件: fputc(c,fp)写一个字符c;fputs(s,fp)写一个字符串s;
读取文件: fgetc(fp)读一个字符;fgets(s,n,fp)读一个字符串到s;