C语言面试题(持续更新)

1.static/const

        C语言的关键字

static 修饰 局部变量时 延长了局部变量的生命周期 直到程序结束  作用域取决于定义它的函数

static 修饰 全局变量时 只允许全局变量在定义它的源文件中使用 其他文件不能对其进行调用

static 修饰 函数是 也只允许函数在定义它的源文件中使用 其他文件不能对其进行调用

const 定义 常量 即不可修改的值

const 修饰指针时

                常量指针 const int * /const * int ->常量的值不可以改变 指针的指向可以改变

                指针常量 const * int                   ->指针的指向不可以改变 常量的值可以改变

2.#define/typedef

#define 处于 程序预处理阶段 不受作用域规则的限制 对文本进行替换

typedef 处于 程序编译阶段 受作用域规则的限制 创建一个新的数据类型

3.volatile

        告诉编译器 被其修饰的变量的值可能会被程序以外的因素(如操作系统、硬件等)所改变 因此每次使用该变量时都需要从内存中重新读取 而不能使用保存在寄存器中的缓存值

4.sizeof/strlen

sizeof 用于计算变量或数据类型所占用内存的字节数(包含\0) 是操作符预处理阶段进行 不对括号内的值进行运算

strlen 用于计算字符串数组的长度(不包含\0) 是函数程序运行阶段进行 会对括号内的值进行运算

5.gcc 编译四个阶段

        预处理        展开头文件 进行宏替换 删除注释 

        编译            有错报错 没错继续运行 生成不可执行二进制文件

        汇编            生成可执行二进制

        链接            链接库函数 动态库或者静态库

6.数组/链表

        数组        存储:连续存储 占用固定的空间 资源利用率低 容易造成资源浪费不足

                       访问:可以通过下标直接访问 时间复杂度为O(1)

                       插入/删除:需要移动大量数据 时间复杂度为O(n)

        链表        存储:随机存储 按需分配 资源利用率高 但每个节点需要额外的存储空间

                       访问:每次访问需要从头节点开始遍历 时间复杂度为O(n)

                       插入/删除:可以从任意节点插入 只需修改相关指针 时间复杂度为O(1) 

7.指针的理解

        指针                内存地址 

        指针变量        存储内存地址的变量

->        间接访问和操作所指向的内存空间的数据

->>        实现内存的动态分配

->>        实现复杂的数据结构

->>        作为函数参数进行高校的参数传递

使用时

->        初始化 防止指向任意内存位置

->        不使用时要进行内存释放

->        注意指针的运算以及解引用

避免野指针

->        初始化指针

->        释放内存后置空

->        注意防止下标越界

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值