每日面试题Day2

C语言中 # 和 ## 的用法

# 是 字符串化操作符,定义时用括号代表参数传递,

可以把传入的参数名替换成带双引号的字符串

定义: #define a(b) #a

使用:a(123)  

编译时会展开成   "123" 

## 是字符串连接符,定义时用括号代表参数传递,

可以把参数在宏定义的字符串末尾连接起来,起到strcat的效果

定义: #define a(b) 123##b

使用:a(123)  

编译时会展开成   123123 

关键字volatile有什么含义

防止编译器优化,a=1,a=2,a=3不被优化成a=3,强制不读缓存去读寄存器

读寄存器必须加volatile,因为寄存器的值经常改变,防止读缓存。

多线程任务共享资源必须加volatile,防止编译器优化出现ABA问题。

关键字static的作用是什么

定义静态变量或者函数,静态变量只初始化一次,如果在类里就属于类。

如果不加extern抛出去的话作用域只限于当前文本。其他文本可以定义重名static变量。

最重要的作用还是函数里面用完不回收

静态变量存放在代码段。

为什么Static变量只初始化一次

静态变量存放在代码段。局部变量存放在栈里。局部变量默认是auto修饰的。

代码段,就是牛。

extern "C"的作用是什么

告诉编译器,文本后面的内容用 c 编译

const有什么作用?

定义常量。常量不能被修改。定义时必须被初始化。

const 定义常量 ,define 也定义常量,

区别在于 define 定义常量是编译器做的字符串替换

const 定义常量是写进只读存储器,放在代码段

什么情况下使用const关键字

修饰函数参数、函数返回值、定义常量、修饰对象。修饰对象时放在类名前后都可以。

修饰指针,常量指针、指针常量。

strlen("\0")=? sizeof("\0")=?

0                               2

C/C++中,strlen是逐字符扫描,碰到\0结束。

sizeof是获取参数的内存大小,参数 \0 会保存在代码段常量区,2字节

strlen 和 sizeof 的区别

strlen是<string.h>里面的函数,sizeof是关键字

strlen 逐字符扫描字符串,统计字符个数,碰到 '\0' 结束

sizeof  在编译时求值,根据数据类型得数据占的字节数

C语言中 strcut 和 union 的区别是什么

一个是结构体一个是联合体

联合体共用一块内存空间。对成员变量的修改会导致其他成员的重写。

联合体内存空间的大小要超过最大成员变量的大小

而且内存空间要能被所有成员变量的大小整除

联合体可以用来判断系统的大小端。

给一个short,末端放个1,然后16位的 Short 用数组拆成两个 8 位的char,判断高位低位哪边大。

结构体要求每个成员变量的首地址能被该变量的对齐字节整除

而且结构体的大小要能被所有成员类型的对齐字节整除

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值