嵌入式面经
2.1 用变量 a 给出下面的定义
(1)一个整型数: int a。
(2)一个指向整型数的指针(一重指针): int *a。
(3)一个指向指针的的指针,它指向的指针是指向一个整型数的指针(二重指针): int **a。
(4)一个有10个整型数的数组 :int a[10]。
(5)一个有10个指针的数组,这10个指针是指向整型数的(指针数组): int *a[10]。
(6)一个指向有10个整型数数组的指针(数组指针):int (*a)[10]。
(7)一个指向函数的指针,该函数有一个整型参数并返回一个整型数(函数指针):int (*a)(int)。
(8)一个有10个指针的数组,这10个指针均指向函数,该函数有一个整型参数并返回一 个整型数(函数指针数组): int (*a[10])(int)。
2.2 下面的代码输出是什么,为什么?
void foo(void)
{
unsigned int a = 6;
int b = -20;
(a + b > 6)? printf("> 6") : printf(" <= 6");
}
答案:输出是 ">6"。
解读:当运算表达式中存在有符号数和无符号数时,有符号数隐式转换成了无符号数(即底层的补码不变,但是此数从有符号数变成了无符号数)。注意,正数的补码为其本身,负数的补码为其反码+1。因此-20变成了一个非常大的正整数,所以该表达式计算出的结果 ">6"。
2.3 写出 float x 与"零值"比较的 if 语句。
答案:
if(x >= -0.000001 && x <= 0.000001)
解读:因为计算机在处理浮点数的时候是有误差的,所以不能将浮点型变量用"=="或"!="与数字比较,应该设法转化成">="或"<="此类形式。
2.4 下面代码有什么错误?
#include
void main()
{
char *s = "AAA";
s[0] = 'B';
printf("%s", s);
}
(1)"AAA"是字符串常量,s是指针,指向这个字符串常量,所以声明s的时候就有问题,应该是cosnt char* s="AAA"。
(2)然后又因为是常量,所以对是s[0]的赋值操作是不合法的。
2.5 下面代码输出是什么?
#include
void main()
{
int *a = (int *)2;
printf("%d", a + 3);
}
答案:输出是14。
解读:代码将数值2强制类型转换为int类型指针,int类型指针加3 相当于指向后面第三个int类型变量的首地址,一个int类型变量占4个字节,所以加3相当于指针往后移了12个字节,指向地址14处。
以上内容摘自牛客官方专刊《嵌入式岗位笔试面试真题讲解》,该专刊不仅有真题讲解,还有经验分享,不清楚嵌入式该学什么的同学,想找嵌入式实习/正式工作的同学,都可以来看看:
https://blog.nowcoder.net/zhuanlan/v0ELPM
嵌入式公司推荐:华为、小米、 OPPO、VIVO、荣耀、一加、 CVTE、 大疆 、insta360影石、 美的 、 TCL 、 海信、创维、烽火、比亚迪、吉利、长安、大众、 经纬恒润 、小鹏、 图森未来、 百度 、 滴滴、蔚来、理想、 联发科、 紫光展锐 、全志、 寒武纪 、 晶晨半导体 、汇顶、 华为、 中兴、 浪潮 、 TP-LINK、讯飞、商汤、 海康威视 、浙江 大华 、360、小马智行、 元戎启行 、 深信服 、移动、联通、电信、旷视、四维图新、中芯国际、复旦微电子。 #嵌入式找工作#
(1)一个整型数: int a。
(2)一个指向整型数的指针(一重指针): int *a。
(3)一个指向指针的的指针,它指向的指针是指向一个整型数的指针(二重指针): int **a。
(4)一个有10个整型数的数组 :int a[10]。
(5)一个有10个指针的数组,这10个指针是指向整型数的(指针数组): int *a[10]。
(6)一个指向有10个整型数数组的指针(数组指针):int (*a)[10]。
(7)一个指向函数的指针,该函数有一个整型参数并返回一个整型数(函数指针):int (*a)(int)。
(8)一个有10个指针的数组,这10个指针均指向函数,该函数有一个整型参数并返回一 个整型数(函数指针数组): int (*a[10])(int)。
2.2 下面的代码输出是什么,为什么?
void foo(void)
{
unsigned int a = 6;
int b = -20;
(a + b > 6)? printf("> 6") : printf(" <= 6");
}
答案:输出是 ">6"。
解读:当运算表达式中存在有符号数和无符号数时,有符号数隐式转换成了无符号数(即底层的补码不变,但是此数从有符号数变成了无符号数)。注意,正数的补码为其本身,负数的补码为其反码+1。因此-20变成了一个非常大的正整数,所以该表达式计算出的结果 ">6"。
2.3 写出 float x 与"零值"比较的 if 语句。
答案:
if(x >= -0.000001 && x <= 0.000001)
解读:因为计算机在处理浮点数的时候是有误差的,所以不能将浮点型变量用"=="或"!="与数字比较,应该设法转化成">="或"<="此类形式。
2.4 下面代码有什么错误?
#include
void main()
{
char *s = "AAA";
s[0] = 'B';
printf("%s", s);
}
(1)"AAA"是字符串常量,s是指针,指向这个字符串常量,所以声明s的时候就有问题,应该是cosnt char* s="AAA"。
(2)然后又因为是常量,所以对是s[0]的赋值操作是不合法的。
2.5 下面代码输出是什么?
#include
void main()
{
int *a = (int *)2;
printf("%d", a + 3);
}
答案:输出是14。
解读:代码将数值2强制类型转换为int类型指针,int类型指针加3 相当于指向后面第三个int类型变量的首地址,一个int类型变量占4个字节,所以加3相当于指针往后移了12个字节,指向地址14处。
以上内容摘自牛客官方专刊《嵌入式岗位笔试面试真题讲解》,该专刊不仅有真题讲解,还有经验分享,不清楚嵌入式该学什么的同学,想找嵌入式实习/正式工作的同学,都可以来看看:
https://blog.nowcoder.net/zhuanlan/v0ELPM
嵌入式公司推荐:华为、小米、 OPPO、VIVO、荣耀、一加、 CVTE、 大疆 、insta360影石、 美的 、 TCL 、 海信、创维、烽火、比亚迪、吉利、长安、大众、 经纬恒润 、小鹏、 图森未来、 百度 、 滴滴、蔚来、理想、 联发科、 紫光展锐 、全志、 寒武纪 、 晶晨半导体 、汇顶、 华为、 中兴、 浪潮 、 TP-LINK、讯飞、商汤、 海康威视 、浙江 大华 、360、小马智行、 元戎启行 、 深信服 、移动、联通、电信、旷视、四维图新、中芯国际、复旦微电子。 #嵌入式找工作#
全部评论
Mark收藏了
相关推荐
投递新大陆科技集团等公司8个岗位
点赞 评论 收藏
分享