C概念

概念

  • 栈:局部变量,程序运行完自动释放
  • 堆:只能手动申请和释放,如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
    b.自定义头文件:一般用" "括起来,为了区分库的头文件,编译器的查找路径为当前路径,可以包含:函数声明,库的头文件,自定义的其他头文件,结构体宏定义,不允许定义变量,若该头文件在项目中的多个文件中包含则会导致重复定义

  • 全局变量,如在1.c文件中定义的全局变量,若在其他文件中使用,在其他文件中使用extern声明该全局变量,将1.c文件包含到文件中

  • 防止头文件重复包含添加下面

#ifndef HEAD_H  //若HEAD_H(自定义)未定义则编译以下内容
#define HEAD_H //宏定义HEAD_H
头文件
函数申明
结构体
等等
#endif  //结束,防止头文件重复包含

小记

1,写代码时if,for等后面只有一条语句也记得写{ },不要省略,养成一种习惯。
2,今天就因为if忘记{},导致编译没错,逻辑没错,就是得不到预期的结果,找了好久才找到问题。

你可能感兴趣的:(C概念)