嵌入式笔试刷题(第11天)
1. 某 32 位系统下,C 程序,请写出输出结果:
void Foo(char str[100]){
printf("%d\n", sizeof(str));
}
int main(int argc, char **argv){
char str[] = "http://localhost";
char *p1 = str;
void *p2 = malloc(100);
int n = 10;
struct A {
int n;
char str[10];
} struct_a;
printf("%d\n", sizeof(str));
printf("%d\n", sizeof(p1));
printf("%d\n", sizeof(p2));
printf("%d\n", sizeof(n));
printf("%d\n", sizeof(struct_a));
Foo(str);
return 0;
}
答案:
sizeof(str):18(字符串常量初始化,包含\0)sizeof(p1):4(指针大小,32 位系统)sizeof(p2):4(void 指针大小)sizeof(n):4(int 类型)sizeof(struct_a):16(结构体包含对齐)Foo(str)中的sizeof(str):4(函数参数退化为指针)
2. 简述以下两段关于循环的程序的优缺点:
第一种写法:
for (i = 0; i < N; i++) {
if (condition)
DoSomething();
else
DoOtherthing();
}
第二种写法:
if (condition) {
for (i = 0; i < N; i++)
DoSomething();
} else {
for (i = 0; i < N; i++)
DoOtherthing();
}
答案:
- 第一种写法逻辑简单、灵活,适合
condition可能在运行时变化的情况,但循环中每次都判断一次if,效率略低。 - 第二种写法效率更高,避免了循环体内重复判断,但结构固定,适合条件不变的场景。
3. 运行下面的 Test 函数会有什么样的结果?
char *GetMemory(void) {
char p[] = "hello world";
return p;
}
void Test(void) {
char *str = NULL;
str = GetMemory();
printf(str);
}
答案:
GetMemory 返回的是一个局部变量的地址,函数返回后内存失效,str 指向无效地址,会导致未定义行为,可能输出乱码或程序崩溃。
4. 用预处理指令 #define 声明一个常数,表示一年有多少秒(忽略闰年问题)。
#define SECONDS_IN_YEAR (365 * 24 * 60 * 60)
5. 请写出一个无限循环。
while (1) {
// do something
}
或
for (;;) {
// do something
}
更多内容全在下方专栏
全网最受欢迎的嵌入式笔试专栏
笔试专栏包含全部最新的笔试必考考点,非常适合在找工作面经薄弱的同学
3000+订阅还会涨价,提前订阅提前享受,持续更新中。
专栏链接:https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk
#嵌入式测试,嵌入式开发##嵌入式笔面经分享##面试经验谈#