嵌入式笔试刷题(第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
#满分简历要如何准备?##嵌入式测试,嵌入式开发##嵌入式笔面经分享##面试经验谈#