概念
- 栈:局部变量,程序运行完自动释放
- 堆:只能手动申请和释放,如malloc申请的空间在堆上,malloc()和free()要成对出现,申请的空间要及时释放,防止出现堆空间不足现象。
- 段错误:出现的原因如下
指针:常量指针/NULL/野指针
数组:数组越界访问,访问到非法区或修改了其他变量
其他:内存不足/双释放/内存泄漏 - 堆栈:先进后出,后进先出
- 队列:先进先出
- 宏定义:取消宏#undef
#if 0
#elif 0
#else 1 //执行
#endif
- 对hello.c文件编译过程
gcc -E hello.c -o hello.i //生成文件去掉注释代替宏
gcc -S hello.i -o hello.s //生成汇编语言
gcc -c hello.s -o hello.o //生成01机器代码
gcc -o hello.o -o hello //目标文件,可执行文件
一般简化:
gcc hello.c -o hello
文件系统
文件信息:索引结点(index)
文件操作:文件描述符(fd)
早期的Unix系统:1024(fd最大值)
Linux系统: 65535(fd最大值)文件的定义: 一组相关数组的有序集合,成为文件
文件打开和关闭
a.打开:fopen(文件名,属性);
b.关闭:fclose(文件指针);文件指针
a.文件指针结构体:FILE,包含了文件的基本信息。
b. 定义文件指针:FILE *指针变量名文件的操作
a. fgetc()/fputc() :字符串写读函数
b. fgets()/fputs() :字符串写读函数
c. fscanf()/fprintf() :格式化读写函数
d. fread(0/fwrite() :块读写函数,C89标准中有BUG多文件包含
a.标准库的头文件:用<>括起来,如#include<stdio.h>
b.自定义头文件:一般用" "括起来,为了区分库的头文件,编译器的查找路径为当前路径,可以包含:函数声明,库的头文件,自定义的其他头文件,结构体宏定义,不允许定义变量,若该头文件在项目中的多个文件中包含则会导致重复定义全局变量,如在1.c文件中定义的全局变量,若在其他文件中使用,在其他文件中使用extern声明该全局变量,将1.c文件包含到文件中
防止头文件重复包含添加下面
#ifndef HEAD_H //若HEAD_H(自定义)未定义则编译以下内容
#define HEAD_H //宏定义HEAD_H
头文件
函数申明
结构体
等等
#endif //结束,防止头文件重复包含
小记
1,写代码时if,for等后面只有一条语句也记得写{ },不要省略,养成一种习惯。
2,今天就因为if忘记{},导致编译没错,逻辑没错,就是得不到预期的结果,找了好久才找到问题。