2020届校招大疆嵌入式部分笔试题
在32位系统中有如下定义,则sizeof(data_t)的值是()
typedef struct data{char m:3;char n:5;short s;union{int a;char b;};int h;}__attribute__((packed)) data_t;
sizeof(data_t) = 11;
__attribute__((packed))的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数对齐,union联合体里面的变量是共享一个地址空间的,以及结构体的位段操作知识点。
参考博客:
__attribute__((packed))详解
结构体、位段与联合体
程序按64位编译,运行下列程序代码,打印输出结果是多少
#define CALC(x,y) (x*y)int main(void) { int i=3;int calc;char **a[5][6];calc = CALC(i++, sizeof(a)+5);printf("i=%d, calc=%d\n", i, calc);return 0;
}
输出结果为: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系统中内核线程和普通线程的区别
普通线程和内核线程
内核线程和用户线程
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
