嵌入式面试题 C语言常见面试题整理_2

1.一个32位的机器,该机器的指针是多少位?

指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的数据总线。

所以指针的位数就是4个字节了。

2.局部变量能否和全局变量重名?

能,局部会屏蔽全局。

局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而

不会用到全局变量。

对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内

都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。 

3.判断x=x+1,x+=1,x++哪个效率最高?为什么?

x++的效率最高,直接去出来+1后在放回原来的地址。

x=x+1最低, 因为执行步骤如下:  <1>读取右x的地址;  <2>x+1;  <3>读取左x的地址; 

<4>将右值传给左边的x(编译器并不认为左右两边的x的地址相同)。

4.main函数执行前后会执行什么

首先main()函数只不过是提供了一个函数入口,在main()函数中的显示代码执行之前,

会由编译器生成_main函数,其中会进行所有全局对象的构造以及初始化工作。简单来

说对静态变量、全局变量和全局对象来说的分配是早在main()函数之前就完成的,所以

C/C++中并非所有的动作都是由于main()函数引起的。 

同理在main()函数执行后,程序退出,这时候会对全局变量和全局对象进行销毁操作,

所以在main()函数还会执行相应的代码。

一个C程序的执行是从___A__。 

A、本程序的main函数开始,到main函数结束

B、本程序的main函数开始,到本程序文件的最后一个函数结束

C、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束

D、本程序文件的第一个函数开始,到本程序main函数结束

5.动态链接和静态链接

绝大多数编译器并不是一个单一的庞大程序,他们通常由多达六七个稍小的程序所组成。

目标文件并不能直接执行,它首先需要载入到连接器映像,连接器确认main 函数为初始化

进入点,把符号应用绑定到内存地址,把所有的目标文件集中在一起,加上库文件,从而

产生可执行文件。

静态链接:把需要使用的每个库函数的一份拷贝加入到可执行文件中,现在静态链接基本淘汰。

动态链接:可执行文件只是包含了文件名,系统提供了庞大的函数库集合,让在如期运行时能

够寻找到程序所需要的函数库。

动态链接的优点:可执行文件的体积非常小,但是运行稍微慢些,但是动态链接可以有效的利用

磁盘空间。

C语言 - 静态链接和动态链接_c语言 动态链接 静态链接-CSDN博客

6.什么是右值引用,跟左值又有什么区别

左值:能对表达式取地址,一般指表达式结束后依然存在的持久对象。

右值:不能对表达式取地址,一般表达式结束后就不再存在的临时对象。

右值和左值引用的区别:左值可以寻址,而右值不行,左值可以被赋值,右值不能被赋值,

可以用来给左值赋值。左值可变,右值不可变。

7.float(单精度浮点型)和double(双精度浮点型)

float:1bit(符号位)+8bit(指数位)+23(尾数位)  2^23=8388608,共7位,意味着最多有

7位有效数字。

double:1bit(符号位)+11bit(指数位)+52bit(尾数位)  2^52=4503599627370496. 一共16位,

同理double的精度为15~16位。

#include <stdio.h>
int main(void)
{
    float m = (float)3.14;
    double n = 10.5;
    printf("%f,%lf\n",m,n);
    return 0;
}

输出:3.140000,10.500000 因为%lf只保留小数点后6位。

8.溢出

short  int  a,b;
A=10000;
B=1000000;

输出时a可以正确输出,但是b不能,因为b不能正确的存储,short只有16bit,转化为10进制只有5位。 

char 占8位1字节转化为10进制只有3位。

short占16位2字节转化为10进制只有5位。

int 占32位4字节转化为10进制只有10位。

long 占32位4字节转化为10进制只有10位。

float占32位4字节转化为10进制只有10位。

double占64位8字节。

9.字符常量 

char  beta; beta=’ab’; 是错误的,改正:char  beta; beta=’ab/’

char  beta; beta=”a”; 是错误的,改正:char  beta; beta=’a’

定义字符串数组:char  a[ ] = "abcse"

非图形字符,如退格,换行,也可以表示成字符型常量。表示方法是使用转义字符”/”;

若有说明语句:char c= ‘\64’ ; 则变量C包含: A

A. 1个字符 B. 2个字符 C. 3个字符 D. 说明不合法,C值不确定

已知char b[5],*p=b; ,则正确的赋值语句是  C

A. b=“abcd” ; B. *b=“abcd”; C. p=“abcd”; D. *p=“abcd”;

下列可以正确表示字符型常量的是  D

A297 B"a" C"\n" D'\t'

设有定义:char*C;以下选项中能够使C正确指向一个字符串的是(A )。 

A char str( )=”strin9”;C=str;

B scanf(”%s”,C.);

C c=getchar( );

D *c=”strin9”;

10.不同数据类型数据间的混合运算

当char和short一起运算时,一律转换成int类型后再运算。

当short和long一起运算时,一律转换成long类型后再运算。

当int和flont或double一起运算时,一律把int,flont转换成double类型再运算。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式_笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值