加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

嵌入式C语言面试题1

12/02 12:00
257
阅读需 13 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1.已知字符‘A‘的ASCⅡ码值是是65,且char c1=‘A’,c2=‘D’;则执行语句printf(“%d, %dn”, c1, c2-2); 后的输出结果是( )

A A,DB A,BC 65,68D 65,66

解析:

在C语言中,字符常量在内存中是以其ASCⅡ码值存储的,可以通过字符变量直接获取其ASCⅡ码值。

首先,我们已知:

字符‘A’的ASCⅡ码值是65。

字符‘D’的ASCⅡ码值是68(因为‘D’在‘A’之后3个位置,所以65+3=68)。

接下来,分析题目中的代码:

char c1 = 'A'; 这行代码定义了字符变量c1,并将其初始化为字符‘A’,所以c1的ASCⅡ码值是65。

char c2 = 'D'; 这行代码定义了字符变量c2,并将其初始化为字符‘D’,所以c2的ASCⅡ码值是68。

然后,执行printf("%d, %dn", c1, c2-2);这条语句:

%d是整数格式说明符,用于输出整数。

c1直接输出,其值为字符‘A’的ASCⅡ码值,即65。

c2-2计算的是字符‘D’的ASCⅡ码值减去2,即68-2=66。66正好是字符‘B’的ASCⅡ码值,但这里以整数形式输出。

因此,输出结果是65, 66

所以,正确答案是D)65,66。

2.char *p="girl" ;的含义是定义字符型指针变量p,p的值是字符串"girl"。()

A 正确

B 错误

解析:

这是一道关于C语言中指针和字符串的题目。我们需要判断给定的语句char *p="girl";是否正确地描述了指针变量p的定义和它的值。

首先,分析语句char *p="girl";

char *p定义了一个字符型指针变量p

"girl"是一个字符串常量,它在内存中的某个位置有一个首地址。

p被初始化为指向字符串常量"girl"的首地址。

接下来,判断题目的描述:

“定义字符型指针变量p”是正确的,因为char *p确实定义了一个字符型指针。

“p的值是字符串"girl"”这一描述需要澄清。实际上,p的值不是字符串"girl"本身,而是该字符串在内存中的首地址。字符串本身是由多个字符组成的字符数组,并以空字符结尾。指针p指向这个数组的首元素(即字符'g'的地址)。

因此,题目的描述是不准确的。指针p存储的是字符串"girl"的首地址,而不是字符串本身。

所以,正确答案是B)错误。

3.在x86系统下,sizeof如下结构体的值是多少?

struct{    char a[10];    int b;    short c[3];}

解析:

在x86系统下(即32位系统),sizeof运算符用于计算结构体所占的内存大小。计算时需要考虑结构体的成员类型、数量以及内存对齐(alignment)的要求。

给定的结构体如下:

复制代码

struct {
char a[10];
int b;
short c[3];
};

我们逐一分析每个成员的大小和对齐要求:

char a[10];:这是一个字符数组,包含10个字符。每个字符的大小是1字节,所以整个数组的大小是10字节。

int b;:在x86系统下,int类型通常占用4字节,并且它通常要求按4字节对齐。

short c[3];:这是一个短整型数组,包含3个short类型的元素。在x86系统下,short类型通常占用2字节。数组的总大小是6字节,但每个short可能也要求按2字节或4字节对齐(具体取决于编译器的对齐策略)。

现在,我们根据这些信息进行计算,同时考虑内存对齐:

char a[10];占用10字节,不需要对齐调整。

接下来是int b;,它要求4字节对齐。由于char a[10];已经占用了10字节,而下一个4字节对齐的位置是12字节(因为10不是4的倍数),所以在这里会有2字节的填充(padding)。

int b;占用4字节。

最后是short c[3];,每个short占用2字节,总共6字节。但是,由于int b;之后的位置已经是4字节对齐的,并且short数组通常要求按2字节或4字节对齐(具体取决于编译器),所以在这里可能不需要额外的填充。然而,为了简化计算,我们假设编译器选择4字节对齐,并且short c[3];之后也需要4字节对齐(这是最常见的情况)。那么,在int b;(4字节)和short c[3];(6字节)之间会有2字节的填充,使得short c[3];从4字节对齐的位置开始。

short c[3];本身占用6字节,不需要额外的填充来达到4字节对齐,因为它之后没有其他成员了。

综上所述,结构体的内存布局可能如下(考虑4字节对齐):复制代码

| char a[10] | padding (2 bytes) | int b (4 bytes) | padding (2 bytes) | short c[3] (6 bytes) |
|-------------|-------------------|-----------------|-------------------|--------------------|
| 10 bytes | 2 bytes | 4 bytes | 2 bytes | 6 bytes |

 

因此,结构体的总大小是:10 + 2 + 4 + 2 + 6 = 24字节。

所以,在x86系统下,sizeof这个结构体的值是24字节。

4.运行以下C语言代码,输出的结果是()

#include <stdio.h>
int main(){    char *str[3] ={"stra", "strb", "strc"};    char *p =str[0];    int i = 0;    while(i < 3) {        printf("%s ",p++);        i++;    }    return 0;}

A stra strb strc

B s t r

C stra tra ra

D s s s

解析:

char *str[3] = {"stra", "strb", "strc"}; 定义了一个包含三个字符指针的数组,每个指针分别指向字符串 "stra"、"strb" 和 "strc" 的首字符。

char *p = str[0]; 初始化指针 p,使其指向 str 数组的第一个元素,即字符串 "stra" 的首字符。

进入 while 循环,循环条件是 i < 3,意味着循环体会执行三次。

在循环体内:

printf("%s ", p++); 打印 p 当前指向的字符串,并将 p 递增,使其指向下一个字符。

i++; 递增循环计数器 i

现在,我们逐步跟踪循环的执行:

第一次循环:

p 指向 "stra" 的 's'。

打印 "stra "。

p++ 使 p 指向 "stra" 的 't'。

i 变为 1。

第二次循环:

p 现在指向 "stra" 的 't'。

打印 "tra "(注意,p 已经跳过了 's')。

p++ 使 p 指向 "stra" 的 'r'。

i 变为 2。

第三次循环:

p 现在指向 "stra" 的 'r'。

打印 "ra "(注意,p 已经跳过了 's' 和 't')。

p++ 会使 p 指向 "stra" 的 'a',但此时循环已经结束。

i 变为 3,循环条件不再满足。

因此,程序的输出是:复制代码

stra tra ra

所以,运行这段代码的结果是输出字符串 "stra tra ra "。

5.有以下语句:printf("%sn", strp[0]);输出值是多少?

char str[4][12] = {"aaa", "bbbb", "ccccc", "dddddd"}, *strp[4];for (int i = 0; i < 4; i++)    strp[i] = str[i];

解析:

在这段C语言代码中,我们定义了一个二维字符数组str和一个字符指针数组strp,并通过循环将str中每一行的首地址赋值给strp中对应的元素。接下来,我们详细解读这段代码。

首先,看定义部分:

复制代码

char str[4][12] = {"aaa", "bbbb", "ccccc", "dddddd"};
char *strp[4];

char str[4][12]定义了一个包含4行、每行12列的二维字符数组,并初始化了前四行。需要注意的是,虽然为每行分配了12个字符的空间,但实际存储的字符串长度并未达到12,剩余空间将自动填充为空字符

char *strp[4]则定义了一个包含4个字符指针的数组,这些指针将用于指向字符串。

接下来,通过循环为strp数组赋值:

复制代码

for (int i = 0; i < 4; i++)
strp[i] = str[i];

在这个循环中,i从0遍历到3。

对于每个istr[i]表示str数组中的第i行,也就是一个指向该行首字符的指针。

我们将这个指针赋值给strp[i],因此strp[i]现在指向了str数组中的第i行字符串。

循环结束后,strp数组中的每个元素都指向了str数组中的一行字符串。具体来说:

strp[0]指向"aaa"

strp[1]指向"bbbb"

strp[2]指向"ccccc"

strp[3]指向"dddddd"

此时,我们可以利用strp数组中的指针来访问或操作str数组中的字符串。例如,printf("%sn", strp[0]);将会输出"aaa"

未完待续,持续更新!以防后边找不到可以点赞收藏下!

相关推荐

电子产业图谱

90后500强外企软件研发工程师,专注C/C++/IoT等技术分享。