嵌入式C语言面试题 - 2024/11/18
欢迎找我进行职业规划,超值的自我投资 -> 嵌入式软件工程师一对一指导
转载请注明来源:
-
下边代码,x值是?
int x=10;
x+ = 3+x%(3);
解析:
-
初始值:
x = 10
-
计算
x % 3
:-
10 % 3
的结果是1
,因为 10 除以 3 的余数是 1。
-
-
计算
3 + x % 3
:-
3 + 1
的结果是4
。
-
-
计算
x += 3 + x % 3
:-
相当于
x = x + 4
。 -
当前的
x
是10
,所以x = 10 + 4
。
-
-
最后,
x
的结果是14
。
因此,执行完 x+=3+x%(3);
后,x
的值是 14
。
2.下边代码输出结果是?
int **pp, *p, a=10, b=20;
pp = &p;
p = &a;
p = &b;
printf("%d,%d", *p, **pp)
解析:
-
int **pp, *p, a=10, b=20;
-
pp
是一个指向指针的指针(即二级指针)。 -
p
是一个指向整型的指针(即一级指针)。 -
a
和b
是整型变量,分别初始化为 10 和 20。
-
-
pp = &p;
-
这行代码将
p
的地址赋值给pp
。现在pp
指向p
。
-
-
p = &a;
-
这行代码将
a
的地址赋值给p
。现在p
指向a
,因此*p
的值是 10。
-
-
p = &b;
-
紧接着,这行代码将
b
的地址赋值给p
。现在p
指向b
,因此*p
的值变为 20。 -
注意,此时
pp
仍然指向p
,但p
的值已经改变,指向了b
而不是a
。
-
-
printf("%d,%d", *p, **pp);
-
*p
:由于p
指向b
,所以*p
的值是b
的值,即 20。 -
**pp
:pp
指向p
,而p
指向b
,所以**pp
相当于*p
,其值也是b
的值,即 20。
-
因此,printf("%d,%d", *p, **pp);
的输出结果是 20,20
。
3.定义语句int *ptr [4];,下面等价的定义语句是?
A int ** ptr;
B int( * ptr) [4];
C int ptr[4];
D int * (ptr [4]);
解析:
在C语言中,int *ptr[4];
定义了一个包含4个整型指针的数组。每个数组元素都是一个指向整型的指针。
A. int **ptr;
-
这定义了一个指向指针的指针,而不是一个指针数组。因此,这与原定义不等价。
B. int (*ptr)[4];
-
这定义了一个指向包含4个整数的数组的指针。虽然这里有括号和
[4]
,但它并不表示一个指针数组,而是表示一个指向数组的指针。因此,这也与原定义不等价。
C. int ptr[4];
-
这定义了一个包含4个整数的数组,而不是指针数组。因此,这与原定义不等价。
D. int *(ptr[4]);
-
这实际上与
int *ptr[4];
是等价的。它定义了一个名为ptr
的数组,该数组包含4个元素,每个元素都是指向整型的指针。这里的括号是可选的,因为[]
的优先级高于*
,所以int *ptr[4];
和int *(ptr[4]);
表示的是同一种类型。
因此,与原定义int *ptr[4];
等价的定义语句是D选项:int *(ptr[4]);
。
4.下边的代码,输出是多少?
#include <stdio.h>
void foo(int b[][3]){
++b;
b[1][1] = 9;
}
int main(){
int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
foo(a);
printf("%d", a[2][1]);
}
解析:
在这个C语言程序中,有一个二维数组a
和一个函数foo
,该函数接收一个二维数组作为参数。
-
二维数组
a
被初始化为:1 2 3 4 5 6 7 8 9制代码
-
在
main
函数中,数组a
被传递给函数foo
。在C语言中,当二维数组作为参数传递给函数时,它实际上是通过指向其第一个元素(即第一个子数组)的指针来传递的。因此,foo
函数中的参数b
是一个指向包含3个整数的数组的指针。 -
在
foo
函数中,执行了++b;
操作。这个操作使b
指针指向了a
的第二个子数组(即{4, 5, 6}
)。此时,b[0]
指向{4, 5, 6}
,b[1]
指向{7, 8, 9}
。 -
接下来,执行
b[1][1] = 9;
。由于b
现在指向a
的第二个子数组,所以b[1][1]
实际上是指a[2][1]
(即原数组中的8所在的位置)。这行代码将a[2][1]
的值更改为9。 -
回到
main
函数,执行printf("%d", a[2][1]);
。由于a[2][1]
的值在foo
函数中被更改为9,所以输出将是9。
因此,程序的输出是9
。
未完待续,持续更新!
以防后边找不到可以点赞收藏下!
欢迎找我进行职业规划,超值的自我投资 -> 嵌入式软件工程师一对一指导