美文网首页
C基础(1)

C基础(1)

作者: 泡芙coder | 来源:发表于2021-09-15 11:26 被阅读0次

    程序运行过程如下:

    预处理, 展开头文件/宏替换/去掉注释/条件编译 (test.i main .i)

    编译,    检查语法,生成汇编                                  ( test.s  main .s)

    汇编,  汇编代码转换机器码                                       (test.o main.o)

    链接    链接到一起生成可执行程序                               a.out

    1、由.c文件到.i文件,这个过程叫预处理。

    2、由.i文件到.s文件,这个过程叫编译。

    3、由.s文件到.o文件,这个过程叫汇编。

    4、由.o文件到可执行文件,这个过程叫链接。

    1. 限定符

    extern 声明一个变量表明该变量已经被别处定义,在此处引用,不开辟空间。

    static 静态修饰,static修饰的变量无法被外链调用,即不可被extern 声明,作用域只在本文件。

    const 修饰的变量不能修改。

    volatile 防止编译器优化。

    2. 数组

    一维数组数组名:

    int a[5];

    数组名a代表数组,也是数组第一个元素的地址,所以说数组名是一个常量(不可赋值)。

    &a 整个数组的地址。

    &a、a、&a[0]在数值上是相等的。

    &a+1 跨度是5个元素,a+1跨度是一个元素。

    二维数组数组名:

    int a[2][3];

    a代表整个数组,也代表数组第一行元素的地址。a+1跨度是3个元素

    &a代表整个数组的地址 &a+1跨度是6个元素

    a[0]代表第0行一维数组的数组名。

    3. strlen和sizeof的区别

    strlen可以测量字符串的有效字符个数,sizeof得到的结果是占有的内存大小。

    4.防止头文件重复包含

    #ifndef

    #define

    #endif

    5.指针

    野指针:指向非法空间的指针,比如没有初始化的指针,或者指针指向被释放的内存。

    万能指针 void* 可以保存任意的地址。

    数组指针 int (*p)[4],也称为行指针。

    指针数组 int **k,或者 int *num[3];

    指针作为函数形参,可以改变实参的值。

    数组作为函数的形参,会退化为指针。

    指针作为函数返回值不能返回普通局部变量的地址,因为局部变量在函数结束之后会被释放。

    字符数组和字符指针和字符常量的区别:

    char a[] = "hello"; //存放在栈区

    char *p = a;

    p = "hello"; //字符串常量存在文字常量区不可改变

    字符串处理函数(库函数了解)

    6.内存管理

    内存分为五个区域:

    代码区、堆区、栈区、静态全局区,文字常量区。

    malloc和free成对使用。

    内存泄漏:内存申请没有释放,导致内存泄露。

    操作内存的一些函数:。。。。。

    7.复合类型

    结构体共用体

    结构体的内存对齐。

    8.标准文件

    一些文件操作的函数。

    相关文章

      网友评论

          本文标题:C基础(1)

          本文链接:https://www.haomeiwen.com/subject/iskwwltx.html