每日面试题Day1

1. 描述普通局部变量、普通全局变量、静态局部变量、静态全局变量的区别

        普通局部变量仅函数内有效,普通全局变量extern出去可以支持多个文件下的函数,静态局部变量作用域也是函数内部,但是静态变量只初始化一次。而且普通变量放在堆里面,静态变量放在BSS段或者方法区。

        静态变量Static限制了变量的作用域只能是本文件,其他文件没有extern的话可以定义同名变量。静态成员是属于类的一部分,静态局部是属于方法的一部分。和类模板/方法共享存储区。

        普通局部不初始化内容随机,普通全局、静态全局和静态局部不初始化都为0。

2. extern 解释

        extern 用来声明一个变量在其他文件中定义了。通常写在头文件里规范代码。

3. C语言中有符号和无符号的区别

        C语言里面有符号无符号一般就像int16、int32、uint16、uint32。

        uint32一般是 stdint.h 里面定义的 typedef unsigned int 类型,uint16之类的就是unsigned int 但是只用了低16位。

4. 变量的声明与定义有啥区别

        声明不为变量开辟空间,是对变量的类型和名称进行说明。

5. 描述变量的命名规则

        字母数字下划线组成,不能以数字开头。

6. #include<> 与#include ""的区别?

        尖括号表示系统路径,引号表示用户路径,没找到才去系统路径找。

7. 关键字 signed 和 unsigned 的区别

        关键字 signed 表示符号数,可以省略,系统变量默认是 signed 类型
        关键字 unsigned 表示无符号数

8. 32 位平台上char short int long float double 各自的字节数

char 8

short 16

int 32

long 32

float 32

double 64

9. 谈谈关键字 register

register修饰寄存器变量,cpu读取寄存器变量比读取一般变量要快。该关键字只是建议变量为寄存器变量,具体是不是由编译器决定。

10. 谈谈关键字sizeof

关键字sizeof一般拿来和函数lenth一起聊,一个是关键字一个是函数,一个是求变量所占字节数,一个是求字符数组的长度。要求一个数组长度的话,一般Sizeof数组名/sizeof数组第一个元素

11. 谈谈volatile关键字

        volatile关键字禁止对变量的优化。

        比如a=1,a=2,a=3,可能编译后的效果就只剩一个a=3。用volatile修饰后强制从内存取值而不是从缓存取值。

12. define 与 typedef

        define 是宏定义,typedef 是为变量取别名。

        define 是预处理指令,在编译前的预处理时期做处理。

        typedef 是编译阶段起作用。

        宏定义是简单的字符替换,不会走类型检查。typedef 在静态区分配空间,整个程序运行过程内存中只有一个拷贝。

前置后置++

        前置++是先局部变量加了再入栈,后置++是先入栈用了再加。

防止头文件重复引用

#ifndef

#define 

#endif

13. inline 函数

        inline关键字告诉编译器将内联函数展开,而不是通过函数调用的方式执行。一般用来优化简单的函数加快执行速度。

        inline是在编译器处理的,有类型检查。

        函数非常小且调用频繁的情况下编译器会自动隐式内联

14. 谈谈你对变量初始化的理解

        在定义变量的时候给变量赋值,这个动作叫做变量初始化。局部变量不初始化内容随机,全局变量、静态局部和静态全局不初始化内容为默认0。良好的编程习惯要求手动初始化。

15. 谈谈 ' ' 和 “ ” 的作用

        单引号的作用是描述一个字符,除了转义字符以外就是ascii码

        双引号描述一个字符串,如果是字符串常量编译器会自动在结尾添加 \0。字符串数组时一般要注意。

16. 谈谈C语言自动类型转换的特点

        不同数据类型之间混合运算就会涉及自动类型转换。

        自动类型转换会保证精度不丢失,把小类型转换成大类型。

        有符号和无符号,转换成无符号

        小类型和大类型,转换成大类型

        char 和 short,只要自动转换就会将自己转换成 int  

17. 谈谈逻辑运算符&& 和 || 的理解

        逻辑与和逻辑或

        涉及短路,逻辑与左边的假了,右边的表达式就不会执行

        逻辑或左边的真了,右边的表达式就不会执行

18. 谈谈运算符 &、|、^ 的应用场景

        & 一般将指定位清零

        | 一般将指定位置1

        ^ 一般将指定位翻转

19. 谈谈逻辑右移和算术右移的区别

        算术右移是针对有符号数的,符号位保留,用符号位填充空的位置

        逻辑右移是针对无符号数的,在左侧插入0,不考虑符号位。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值