嵌入式笔试刷题专栏(第一天)

1.(void *)ptr和(*(void **))ptr的结果是否相同? 其中ptr为同一个指针

✅ 第 1 题:void *ptr 与 *(void **)ptr 有什么区别?

📌 考点: 指针类型转换、void 指针用法

👀 易错点: 误以为 void* 可直接解引用

  • void *ptr; 是一个通用指针,指向任意类型,但不能直接解引用(没有类型信息)。
  • *(void **)ptr:假设 ptr 本身是一个 void** 类型的变量,即 ptr 指向一个 void*,可以解引用得到一个 void*
  • 🧠 举例:

    void *a = malloc(4);
    void **b = &a;
    void *c = *b;  // 相当于 *(void **)b,没问题
    
    void *x = b;   // 错误用法!x 是 void*,不能表示 void**
    void *y = *x;  // 错误,void* 不能解引用
    

    2.要对绝对地址0x100000赋值,我们可以用(unsigned int *)0x100000=1234; 那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做?

    ✅ 第 2 题:如何跳转到 0x100000 执行一段程序?

    📌 考点: 裸机开发、函数指针强制转换

    🧠 在嵌入式中,经常需要跳转到特定 Flash/ROM 地址执行,比如 OTA 升级、Bootloader 跳转。

    🧾 写法如下:

    typedef void (*jump_func)(void);
    jump_func jump = (jump_func)0x100000;
    jump();  // 跳转到 0x100000 处执行
    
    
    

    ⚠️ 注意:

    • 必须确认该地址有有效代码,并且是可执行段。
    • 跳转前可能要关闭中断、重配置堆栈等。

    3.给定结构体

       struct A

       {

           char t:4;

           char k:4;

           unsigned short i:8;

           unsigned long m;

    }; 问sizeof(struct A)是多少?

    ✅ 第 3 题:结构体位域的 sizeof

    📌 考点: 内存对齐、位域填充

    结构体位域字段虽然按位分配,但实际大小依赖对齐规则。

    🧠 示例:

    struct A {
        unsigned int a:1;
        unsigned int b:3;
        unsigned int c:2;
    };
    std::cout << sizeof(A) << std::endl; // 输出 4 或 8,依实现而异
    
    
    
    • 一般位域按 int 对齐。
    • 关键点:不能假设位域节省空间,需依赖编译器布局策略。

    4..int main()

     {

     

    }

    ✅ 第 4 题:空的 main() 函数会返回什么?

    📌 考点: main 函数返回值

    int main() { }
    
    
    

    ⛔ 这其实是 UB(未定义行为),虽然一些编译器会默认补上 return 0;,但标准要求返回值必须明确。

    ✔ 推荐:

    int main() {
        return 0;
    }
    

    更多内容全在下方专栏

    全网最受欢迎的嵌入式笔试专栏

    笔试专栏包含全部最新的笔试必考考点,非常适合在找工作面经薄弱的同学

    3000+订阅还会涨价,提前订阅提前享受,持续更新中。

    专栏链接:https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk

#嵌入式##你的秋招第一场笔试是哪家##笔试#
全部评论

相关推荐

技术面,准时开始:自我介绍;拷打项目,介绍项目,面试官会进行适当打断,询问。项目中:创建进程的函数是什么;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;怎么创建socket连接;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;监听是哪个函数;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;监听下一个函数是什么;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listen和accept哪个是阻塞的。(脑子抽了说listen)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;线程之间是怎么交互的;互斥锁读写锁的区别;进程线程区别;进程通信方式有哪些;怎么防止进程间读写冲突;有名管道和无名管道的区别;(看了忘记了,不应该)讲一下Linux定时器(不知道);讲一下Linux进程线程的调度策略(不知道);static;结构体联合体区别;结构体字节对齐;讲一下使用指针的例子,除了使用指针还能使用什么?类的继承和多态;深拷贝浅拷贝;什么情况下一定使用深拷贝;最后给出一段代码,查找错误:函数中返回了局部变量;介绍公司情况,询问什么时候能来,可实习多久;反问。第一次面试,还是很紧张的,面试官问的问题也不难,自己没回答好是自己的实力不足,需要学习的地方还有很多。HR面,准时开始自我介绍;最有成就的一件事;最有压力的一件事;个人爱好;为什么要来实习;来实习想收获一些什么;更多的是对个人的了解;
查看28道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务