嵌入式工程师LinuxC笔试题(一)

时间:2022-08-08 19:59:56

1.请问int * p 和 char * p分别占几个字节?为什么?
都是占4个字节,因为两者都是指针变量,指针变量里面保存的是地址,地址在操作系统中是固定长度,长度是由系统的位数决定的,操作系统32位,长度则为4个字节,而操作系统为64位,长度则为8个字节。

2.请简述sizeof与strlen的区别
sizeof:是运算符,测量一个变量或数据类型所占的字节长度;统计字符串长度的时候加’\0’;在编译时就可以计算出长度;
strlen:是函数,计算字符串的长度;在统计字符串长度时不加’\0’;在函数运行时才计算。

3.请简述用户空间的内存分配及各空间保存的数据类型
用户空间共3G。分为:栈空间,堆空间,数据区,代码段。
栈空间保存:局部变量,函数形参,自动变量;栈空间特点:先进后出,空间由系统管理;栈空间生命周期所在函数执行结束后释放;栈空间保存的局部变量未初始化时,默认初始化为随机值。
堆空间:由malloc,ralloc,calloc这些函数分配的空间在堆空间;堆空间特点:先进先出,由用户管理。
数据区又分为:bss段,or段,静态数据区。其中bss保存的是未初始化的全局变量,当未初始化时,系统默认初始化为0。or段保存的是常量,里面保存的值只能做读的操作,不能被修改。静态数据区保存的是static修饰的变量以及初始化的全局变量。数据区的生命周期是整个程序执行完之后再释放。
代码段保存的是代码。

4.请说明全局变量和局部变量的区别
1.分配区域:
全局变量分配在数据区,局部变量分配在栈空间;
2.生命周期:
全局变量整个程序执行完之后释放,局部变量所在函数执行完之后释放;
3.初始化:
全局变量未初始化时,系统默认初始化为0;局部变量未初始化时,默认初始化为随机值。

5.程序阅读题
请问下面的代码输出结果是什么?

int i = 1;
void main()
{
    int i = i;
}

输出结果为一个随机值。因为当全局变量与局部变量重名的时候,局部变量起作用,而主函数中定义i的时候并未对其初始化,所以i的值为一个随机值。