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

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

嵌入式开发工程师面试题2

2小时前
66
阅读需 9 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

程序运行后的输出结果是()

int main() {int a[3][3], *p, i;    p = &a[0][0];for(i = 0; i < 9; i++) p[i] = i;for(i = 0; i < 3; i++) printf("%d ", a[1][i]);}

解析:

程序运行后的输出结果将是数组 a 的第二行元素的值。让我们逐步分析这个程序:

声明了一个 3x3 的整型数组 a,一个整型指针 p,和一个整型变量 i

将指针 p 指向数组 a 的第一个元素,即 a[0][0]

使用一个循环,通过指针 p 为数组 a 的所有元素赋值,从 0 到 8。数组 a 将会是这样的:

a[0][0] = 0, a[0][1] = 1, a[0][2] = 2,
a[1][0] = 3, a[1][1] = 4, a[1][2] = 5,
a[2][0] = 6, a[2][1] = 7, a[2][2] = 8

第二个循环遍历数组 a 的第二行,即 a[1][i],并打印每个元素。

所以,程序将打印第二行的三个元素:3, 4, 5。

完整的输出结果是:复制代码

3 4 5

2.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是( )

A char s[10]="abcdefg";

B char t[]="abcdefg",*s=t;

C char s[10];s="abcdefg";

D char s[10];strcpy(s,"abcdefg");

解析:

在C语言中,字符串的赋值是一个常见的操作,但需要遵循一定的规则。

A. char s[10]="abcdefg";
这是正确的。这里定义了一个字符数组s,并初始化为字符串"abcdefg"。数组大小为10,足够存储该字符串及其终止符

B. char t[]="abcdefg",*s=t;
这也是正确的。这里定义了一个字符数组t并初始化为字符串"abcdefg",同时定义了一个字符指针s,并将其指向数组t的首地址。这样,指针s就指向了字符串"abcdefg"

C. char s[10];s="abcdefg";
这是错误的。在这里,s是一个字符数组,而不是字符指针。数组名(在这里是s)在大多数表达式中会被转换为指向数组首元素的指针,但它本身是一个常量,不能被赋值。尝试将字符串字面量的地址赋给数组名s是不合法的,编译时会报错。

D. char s[10];strcpy(s,"abcdefg");
这是正确的。这里使用strcpy函数将字符串"abcdefg"复制到字符数组s中。strcpy函数是标准库函数,用于复制字符串,包括终止符。数组大小为10,足够存储该字符串及其终止符。

综上所述,不能正确赋字符串,并且编译时系统会提示错误的选项是C。在C语言中,不能直接将字符串字面量赋给字符数组名,而应该使用初始化(如选项A)或字符串复制函数(如选项D)。

3.C语言中break和continue语句说法正确的是()。

A break语句只应用于循环体中

B continue语句只应用于循环体中

C break是无条件跳转语句,continue不是

D break和continue的跳转范围不够明确,容易产生问题

解析:

在C语言中,breakcontinue是两个用于控制流程的关键字,它们主要在循环和switch语句中使用。接下来,我们将逐一分析每个选项的正确性:

A. break语句只应用于循环体中

这是不正确的。break语句不仅可以在循环体中使用,还可以在switch语句中使用,用于跳出当前的switch分支或循环体。

B. continue语句只应用于循环体中

这是正确的。continue语句只能在循环体中使用,它的作用是跳过当前循环的剩余部分,并立即开始下一次循环迭代。

C. break是无条件跳转语句,continue不是

这个说法部分正确,但不完全准确。break确实是无条件地跳出当前的循环或switch语句,可以认为是一种无条件跳转。然而,continue也可以被视为一种“有条件”的跳转,因为它会跳过当前循环的剩余部分,但并不是无条件地跳出整个循环或程序块。更准确地说,continue是控制循环迭代的语句,而不是传统意义上的跳转语句。

D. breakcontinue的跳转范围不够明确,容易产生问题

这是不正确的。在C语言中,breakcontinue的跳转范围是明确的。break会跳出最近的包围它的循环或switch语句,而continue会跳过当前循环的剩余部分并继续下一次迭代。只要程序员理解了这些语句的作用和范围,它们就不会产生混淆或问题。

综上所述,正确的选项是B:continue语句只应用于循环体中。

4.fseek函数的正确调用形式是()

A fseek(文件类型指针,起始点,位移量)

B fseek(文件类型指针,位移量,起始点)

C fseek(位移量,起始点,文件类型指针)

D fseek(起始点,位移量,文件类型指针)

解析:

在C语言中,fseek函数用于移动文件指针到指定的位置。其正确的调用形式非常重要,因为它决定了函数如何以及在哪里移动文件指针。

fseek函数的原型通常是这样的:c

复制代码

int fseek(FILE *stream, long offset, int whence);

从原型中我们可以看出,fseek函数需要三个参数:

FILE *stream:这是一个指向文件的指针,它标识了要操作的文件。

long offset:这是位移量,表示要从起始点移动多少字节。

int whence:这是起始点,用于指定从哪里开始计算位移。它通常是以下几个宏之一:SEEK_SET(从文件开始)、SEEK_CUR(从当前位置)或SEEK_END(从文件末尾)。

根据这个原型,我们可以对比给出的选项:

A. fseek(文件类型指针,起始点,位移量)
这是错误的,因为参数的顺序不正确。

B. fseek(文件类型指针,位移量,起始点)
这是正确的,它匹配了fseek函数的原型。

C. fseek(位移量,起始点,文件类型指针)
这是错误的,因为参数的顺序和类型都不正确。

D. fseek(起始点,位移量,文件类型指针)
这也是错误的,因为参数的顺序不正确。

因此,正确的选项是B:fseek(文件类型指针,位移量,起始点)。这符合fseek函数的定义和用法。

 

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

相关推荐

电子产业图谱

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