1.函数声明--定义--调用
先声明,再int main(){},最后定义函数;
2.新建func.c,里面放入print()函数,加上头文件,链接之后仍然可以实现功能;
3.新建头文件--func.h, 将#include<stdio.h>等等放入func.h头文件,在main.c中加上include"fun.c",双引号表示优先搜索当前路径;
4.头文件func.h中首先声明,后面写函数会自动联想;
5.全局变量为数据段中的值,就近原则;
局部变量中的变量为局部函数中的值,就近原则;
6.全局变量存放在数据段,会降低阅读难度,尽量不用全局变量;
7.ctrl+k+d:复制选中代码;ctrl+k+c:注释选中代码;
void b(jmp_buf envbuf)
{
printf("I am b funcion.\n");
longjmp(envbuf,5);
}
void a(jmp_buf envbuf)
{
printf("Before b(),I am a funcion.\n");
b(envbuf);
printf("After b(),I am a funcion.\n");
}
int main()
{
jmp_buf envbuf;
int i = 0;
i = setjmp(envbuf);
if (i == 0)
{
a(envbuf);
}
system("pause");
return 0;
}
8.进入函数-->逐语句;
9.static修饰3种值:
1).全局变量,只对本文件可见,其他文件不可见;
2).局部变量,不存在于栈内存,静态局部变量初始化一次,统计执行次数;
3).函数,void print_two()//默认extern;若加static,只能在本文件内被调用,不能被其他文件使用;
10.求结构体内存空间应该用sizeof();每个变量应该对齐;为了避免浪费空间,小字节变量应该放在一起;
11.混合数据类型%c之前应该加一个空格;
scanf("%d%s %c%d%f%s", &s_arr[i].num, s_arr[i].name, &s_arr[i].sex,
&s_arr[i].age, &s_arr[i].scores, s_arr[i].addr);
12.int a[10]; int *p=(int*)calloc(1,sizeof(a));//表明申请1*sizeof(a)的空间,并且初始化;
13.CTRL+K+F,格式化
14.windows为每个函数分配1M的空间,大概25万个整型数;
15.%!xxd-->linux看内存
16.文件模式:
文本模式:“r+”:(往文件中写入\n,磁盘存储的是\r\n)写入hello\nworld这11个字节,实际写入12个字节
二进制模式:"rb+":(往文件中写入\n,磁盘存储的是\n)
17.sscanf();整型浮点型转化成字符串;
sprintf();
18.fscanf(fp,"%d%s %c%f%f%f",&s.stu_id,s.name,&s.sex,&s.score[0],
&s.score[1], &s.score[2]) != EOF
%c应该设置空格!!
!!!!!!切记!