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系统中内核线程和普通线程的区别

普通线程和内核线程

内核线程和用户线程

  • 7
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值