文章目录
- 常见面试题目讲解
- 宏定义
- 数据声明
- 类型修饰符的使用总结
- 位操作
- 访问固定内存位置
参考: 麦子学院-嵌入式C语言高级-C语言函数的使用-常见面试题目讲解
参考: 嵌入式程序员应该知道的0x10个基本问题
常见面试题目讲解
宏定义
1 .用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
#define 宏名 宏体
宏名:大写字母表示
#define SECOND_OF_YEAR 123456 //不推荐
#define SECOND_OF_YEAR (365243600)UL //常量表达式,编译时就计算完成,需要保护
INT的常量的范围
char 8bit,0-255 最多256 需要合适的盒子,所以加上L,无符号加U
16 bit,0-65535 最多65536
int a = SECOND_OF_YEAR;
数据声明
用变里a给出下面的定义
a)一个整型数〈An integer)
int a;
b)一个指向整型数的指针(A pointer to an integer)
int *a;
c)一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer toan integer)
int **a;
d)一个有10个整型数的数组〈An array of 10 integers)
int a[10];
e)一个有10个指针的数组,该指针是指向一个整型的。(An array of 10 pointers tointegers)
int* a[10] // *修饰10,每一个元素的属性,是个地址,[]修饰a,右侧优先级高,a升级为数组标签,a的左侧变为对存放内容的修饰,int修饰*指向整形数
f)一个指向有10个整型数数组的指针( A pointer to an array of 10 integers)
int[10]*a ----->int (*a)[10]
g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to afunction that takes an integer as an argument and retums an integer)
int fun(int) *a----->int (*a)(int)
h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(An array of ten pointers to functions that take an integer argument and return aninteger
int (*a[10])(int)
类型修饰符的使用总结
关键字static的作用是什么?
1.修饰局部变量;
默认局部变量在栈空间存在,生存期较短;
局部静态化,局部变量在数据段中保存,程序结束才结束
2.修饰全局变量;
编译时防止重命名(多个名),只在本文件内起作用
3.修饰全局函数。
编译时防止重命名(多个名),只在本函数内起作用
关键字const有什么含意?
C:只读,建议性,不具备强制性 不是常量,尽量不修改,指针,越界,溢出都能修改
c++:常量
关键字volatile有什么含意?并给出三个不同的例子·
防止C语言编译器优化,该变量的修改可能通过第三方来修改
位操作
嵌入式系统总是要用户对变里或寄存器进行位操作。
给定一个整型变里a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。
设置就是set 1,清除就是clear 1.
unsigned int a;
a|=(0x1<<3);
a &=~(0x1<<4);
访问固定内存位置
在某工程中,要求设置一绝对地址为0x67a9的整型变里的值为0xaa66。编译器是一个纯粹的ANSI疴译器。写代码去完成这一任务。
方式1:
int *p = (int *)0x67a9;
p[0] = 0xaa66;
方式2:
*((int )0x67a9) = 0xaa66;
方式3:
((void()(void))0x67a9)();