嵌入式笔试刷题(第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

#满分简历要如何准备?##嵌入式测试,嵌入式开发##嵌入式笔面经分享##面试经验谈#
全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务