自己的一点嵌入式面试题目+答案

自己的一点嵌入式面试题目+答案

C语言面试题目
宏定义

1.用预处理指令#define声明一个常数,用以表明1年有多少秒?(忽略闰年)

#define 宏名 宏体

宏名 : 一般来说都用大写字母表示

#define SECOND_OF_YEAR	123456

#define SECOND_OF_YEAR	(365*24*3600)UL

上述两个表达式中,第一个直接是人为计算出了结果然后再赋值给以后需要的操作,第二个是直接写出表达式,让CPU进行计算,因为在C语言中,这个表达式是一个表达式常量,宏定义了之后,这个SECOND_OF_YEAR的值就是固定的了,所以虽然两个都对,但是第二个表达式更优。如果是个表达式,一定要加个括号来保护宏体。

因为默认是int ,是4个字节,为了保证定义的数是4个字节,就要在后面加个L,因为是秒数,所以一定不是负数,所以要加UL,确定可以进行移植到其他的开发板。

数据声明

用变量a给出下面的定义

a)一个整形数(an interger)

​ int a;

b)一个指向整型数的指针(a pointer to an interger)

​ int *a;

c)一个指向指针的指针,它指向的指针指向一个整型数(a pointer a pointer to an interger)

​ int * *a;

d)一个有10个整型数的数组(a array of 10 interger)

​ int a[10];

e)一个有10个指针的数组,该指针是指向一个整型数的(an array of 10 pointer to interger)

​ int* a[10];

f)一个指向有10个整型数组的指针(a pointer to an array 10 interger )

​ int (*a)[10]

g)一个指向函数的指针,该函数有一个整型参数并返回一个整形数(a pointer to a function that takes an interger as an argument and returns an interger)

​ int (*a)(int)

h)一个有10个指针的数组,该数组指向一个函数,该函数有一个整型参数并返回一个整形数 (an array of ten pointers to functions that take an interger argument and returns an interger)

​ int (*a[10])(int)

修饰符的使用总结

关键字static的作用是什么?

1、修饰局部变量

​ 默认局部变量在栈空间存在,生存期较短,加上static后叫做局部静态化,局部变量,在静态数据段保存,生存期非常长

2、修饰全局变量

​ 防止重命名,限制变量名只在本文件内起作用

3、修饰全局函数

防止重命名

关键字const有什么含义?

在C语言中const:只读,建议性,不具备强制性,不等于常量

C++中,常量

关键字volatile有什么含义?并给出三个不同的例子。

防止C语言编译器的优化,它修饰的变量,该变量的修改,可能通过第三方来修改

位操作

嵌入式系统总是要用户对变量活寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a的bit 3,。在以上两个操作中,要保持其他位不变。

unsigned int a;
a |=(0x1<<3);//设置

a &= ~(0x1<<3)//清除
访问固定内存位置

在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66.编译器是一个纯粹的ANSII编译器。写代码去完成这一任务。

int *p=(int *)0x67a9;
p[0]=0xaa66;

或者把地址当成一个数来处理

*((int *)0x67a9)=0xaa66;//直接取这个绝对地址

或者把地址当成一个函数来处理

((void (*)(void))0x67a9)();//前面一堆当做函数指针直接像调用函数一样的调用
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值