当前位置:   article > 正文

2020届校招大疆嵌入式部分笔试题_大疆校园招聘嵌入式考试

大疆校园招聘嵌入式考试

 在32位系统中有如下定义,则sizeof(data_t)的值是()

  1.     typedef struct data{
  2.         char m:3;
  3.         char n:5;
  4.         short s;
  5.         union{
  6.             int a;
  7.             char b;
  8.         };
  9.         int h;
  10.     }__attribute__((packed)) data_t;

sizeof(data_t) = 11;
__attribute__((packed))的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数对齐,union联合体里面的变量是共享一个地址空间的,以及结构体的位段操作知识点。

参考博客:

__attribute__((packed))详解

结构体、位段与联合体

程序按64位编译,运行下列程序代码,打印输出结果是多少

  1. #define CALC(x,y) (x*y)
  2. int main(void) {
  3. int i=3;
  4. int calc;
  5. char **a[5][6];
  6. calc = CALC(i++, sizeof(a)+5);
  7. printf("i=%d, calc=%d\n", i, calc);
  8. return 0;
  9. }

输出结果为:i=4, calc=725

注意在宏定义中带参数时括号的用法,在本题中#define CALC(x, y)    (x*y)的结果是725,但是如果这样写:#define  CALC(x,y)  (x)*(y) 的结果就是735

一般32位机器就是5*6*4 = 120,64位则是5*6*8=240 ,char *a是字符型指针,char **a是指针的指针,在64位和32位中指针的大小是不一样的

参考博客:

带参数的宏定义

Linux系统中内核线程和普通线程的区别

普通线程和内核线程

内核线程和用户线程

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号