怎么查网站备案号,网站sem怎么做,手机网站营销方案,dwcc怎么做网站大家好#xff0c;我是知微#xff01;
正逢求职季#xff0c;分享一些嵌入式面试当中经常会遇到的题目#xff0c;希望这些干货对小伙伴们面试有用哦#xff01;
1、介绍一下static关键字的作用
在C语言中#xff0c;static 关键字有几种不同的作用#xff0c;根据其…大家好我是知微
正逢求职季分享一些嵌入式面试当中经常会遇到的题目希望这些干货对小伙伴们面试有用哦
1、介绍一下static关键字的作用
在C语言中static 关键字有几种不同的作用根据其用途可以大致分类如下
局部变量当static用于函数内的局部变量时它使该变量的值在函数调用之间持久化即变量在函数的多次调用间不会被重新初始化。它仍然只在声明它的代码块内可见。全局变量将全局变量声明为static可以限制其链接范围仅限于定义该变量的文件内部也就是说它不可以被其他文件通过extern外部声明所访问。函数如果一个函数被声明为static它的链接范围也将限制在其定义的文件内。在文件外部不可见不能被其他文件调用。类成员在面向对象的编程语言中如C或Javastatic可以用来声明静态成员变量和成员函数。静态成员被该类的所有实例共享不属于任何单独的对象实例。静态成员函数同样不属于任何单个对象因而没有this指针并且只能访问其类的静态成员。
2、介绍一下const关键字的作用
const 关键字在C语言中用来声明一个常量。被const修饰的变量在定义后不可更改。const可以用于不同的上下文中
局部变量标记函数内的局部变量为常量意味着该变量的值在其作用域内不能被改变。全局变量用const修饰全局变量可以设置跨文件的不可变数据。指针const用于指针时可以让指针指向的值或者指针本身的值指向的地址不可变。例如const int *ptr表示指向的int值不可改变而int * const ptr表示指针ptr的值地址不可更改。函数参数如果函数的参数被标记为const意味着传递给函数的变量在函数内不会被改变这对于引用和指针参数尤其重要因为它告诉用户这些参数是用来读取而非修改的。类成员在C中const可以用于成员函数表明该成员函数不会修改其所属的对象。这样的成员函数可以被一个const对象调用。
3、头文件中的 ifndef/define/endif 是干什么用的
#ifndef、#define、#endif 这三个预处理指令用于防止头文件重复包含。首次包含时它会定义一个宏如果该头文件被再次包含#ifndef 检测到宏已定义就会跳过头文件内容避免重复定义错误。
4、用变量a定义
a)一个整型数 b) 一个指向整型数的指针 c) 一个指向指针的的指针它指向的指针是指向一个整型数 d) 一个有10个整型数的数组 e) 一个有10个指针的数组该指针是指向一个整型数的 f) 一个指向有10个整型数数组的指针 g) 一个指向函数的指针该函数有一个整型参数并返回一个整型数 h) 一个有10个函数指针的数组该指针指向一个函数该函数有一个整型参数并返回一个整型数
a) int a;
b) int *a;
c) int **a;
d) int a[10];
e) int *a[10];
f) int ( *a)[10];
g) int ( *a)(int);
h) int ( *a[10])(int);5、new和malloc的区别
类型安全 new 是 C 中的运算符它自动计算需要分配的空间大小并返回正确的类型指针无需类型转换。malloc 是 C 语言中的库函数它需要手动计算字节数并返回 void* 类型使用时通常需要强制类型转换。 构造/析构函数 new 在分配内存的同时调用对象的构造函数为对象的成员赋予初始值。malloc 仅分配内存不调用构造函数因此不初始化内存。 异常处理 new 分配内存失败时会抛出异常bad_alloc。malloc 分配内存失败时返回 NULL。 匹配操作 使用 new 分配的内存应该用 delete 来释放。使用 malloc 分配的内存应该用 free 来释放。 内存分配方式 new 通常分配的是单个对象的内存。malloc 用来分配一段指定大小的内存区域适合分配数组形式的内存块。 重载 new 可以被重载以提供自定义的内存分配行为。malloc 不能被重载因为它是 C 标准库中的一个函数。
6、嵌入式系统中经常要用到无限循环如何用C编写死循环
使用 while 循环
while(1) {// 这里放置循环体内的代码
}使用 for 循环
for(;;) {// 这里放置循环体内的代码
}使用 do-while 循环
do {// 这里放置循环体内的代码
} while(1);使用 goto 语句
LOOP_START: // 这里放置循环体内的代码
goto LOOP_START;虽然 goto 方法可以实现
7、隐式转换规则
如下代码的输出结果是为什么
#include stdio.h
int main(void)
{
unsigned int a 6;
int b -20;if (a b 6)
printf(ab大于6\n);
else
printf(ab小于6\n);return 0;
}输出结果
ab大于6解析
因为编译器会将有符号数b转换成为一个无符号数即此处 ab 等价于 a(unsigned int)b 。
该程序运行在32bit环境下b的值为0xFFFFFFFF-201 4294967276即ab将远远大于6。
C 语言按照一定的规则来进行此类运算的转换转换的顺序为
doublefloatunsigned longlongunsigned intint8、sizeof和strlen的区别是什么
sizeof() 是一个运算符而 strlen() 是一个函数。sizeof() 计算的是变量或类型所占用的内存字节数而 strlen() 计算的是字符串中字符的个数。sizeof() 可以用于任何类型的数据而 strlen() 只能用于以空字符 ‘\0’ 结尾的字符串。sizeof() 计算字符串的长度包含末尾的 ‘\0’strlen() 计算字符串的长度不包含字符串末尾的 ‘\0’。
以上就是今天要分享的内容了 你的每一次点赞 ⭐收藏 评论都是我更新的动力如有错误请留言指正非常感谢