C语言作为嵌入式Linux开发的必备工具,作为嵌入式Linux开发的基础语言,那么在面试嵌入式工程师时C语言定是面试中的重中之重 。作为一名开学就大三的老学长,不得不为找工作做必要准备。每天做一道C语言面试题,并且能够融会贯通。
题目描述:
在未排序的数组中找到第k个最大元素。请注意,你需要找的是数组排序后的第k个最大的元素而不是第k个不同的元素。
题目分析:
这道题主要考察的是排序的相关知识,通过给一个数组进行排序然后再找出第k大的元素并返回就可以了。
解题代码:
题目描述:
以下程序的输出结果是什么?
题目分析:
本题主要考察了宏定义、三目运算符、变量自增相关知识。
#define 是用来定义宏的,在编译的时候,编译器会把代码中 max(a,b)都替换成 (a>b?a:b)。三目运算符 ( (exp1) ? exp2 : exp3 ) 的意思是,如果dao 表达式exp1的值为真,则返回表达式exp2,否则返回表达式exp3。所以 (a>b?a:b) 的意思是 如果a的值大于b,就返回a的值,否则返回b的值。
第一步:biggest=x[0]biggest=(x[0]>x[i++]?x[0]:x[i++]) //i++是先赋值后运算 值为x[1] 值为x[2] i=2 i=3biggest=(x[0]>x[1]?x[0]:x[2]//0>2?0:1此时biggest的返回值为x[2],既为1第二步:biggest=x[2]biggest=(x[2]>x[i++]?x[2]:x[i++]) 值为x[3] 值为x[4] i=4 i=5biggest=(x[2]>x[3]?x[2]:x[4]//1>3?1:-1此时biggest的返回值为x[4],即为-1题目结果:
输出结果为: -1 2020.8.7题目描述:
有定义:typedef int (* p)(char,int); 请描述这个语句含义
题目解析:
声明一个函数指针类型的新名字为p,要求此类型满足指向函数返回值为int,形参为两个,分别是char和int。在此处函数的名字并不需要固定,所以不需要声明在类型里typedef原类型 新类型的名字
2020.8.8题目描述:
【面试题-是陷阱么?】32位系统中,下面代码,请说出*ptr1,*ptr2的值。
int a[4] = {x, y, z, m};int *ptr1 = *(a + 1);int *ptr2 = (int *) ((int)a + 1);题目解析:
本题需要注意给指针赋值的方式,在定义时给其赋值,定义以后赋值的方式,以及数组名代表首元素的地址。同时,还要注意打印的是对应指指针变量的值还是地址。
赋值方式1:int a[4] = {1, 2, 3, 4};int *ptr1=a;//ptr1指向a[0]赋值方式2:int *ptr1;ptr1=a;赋值方式3:int *ptr1=&a[0];注意:当在指针变量赋值为数字,会默认将数字认定为地址,那么该指针就是指向该地址。
#include<stdio.h>int main(){int *ptr=64;printf("ptr:%xn",ptr);//打印ptr指向的地址}运行程序发现打印的结果是:ptr:64
通过在编译器下运行以下代码:
#include<stdio.h>int main(){ int a[4]={1,2,3,4}; int *ptr1=*(a+1); int *ptr2=((int)a+1); printf("ptr1 = %xn",ptr1); printf("ptr2=%xn",ptr2); printf("a+0=%x a+1=%x ",a+0,a+1);}输出结果为:
ptr1 = 2ptr2=61ff09a+0=61ff08 a+1=61ff0c可以明显的看出打印的结果为ptr1和ptr2对应指向的地址。int *ptr1=*(a+1);是将*(a+1)指向的值(2)当做地址赋值给ptr1,故打印的值为2。int *ptr2 = (int *) ((int)a + 1);是将数组元素的第一个地址(a[0]的地址)强制转换为整形然后加一赋值给ptr2。因此打印的值比a[0]的地址大一。
2020.8.9题目描述:
头文件中的ifndef/define/endif干什么用的?
题目解析:
在c语言中,对同一个变量或者函数进行多次声明是不会报错的。所以如果h文件里只是进行了声明工作,即使不使用# ifndef宏定义,多个c文件包含同一个h文件也不会报错。同时可以防止头文件重复调用、部分语法重复声明定义。
题目描述:
#include <stdio.h>int fun( int x ){ int p; if (x == 0|| x == 1 ) return(3); p = x - fun( x – 2 ); return(p);}main(){ printf ("%dn",fun(9));}程序运行后输出结果是?
题目解析:
本题考察的函数的递归调用,func(9) = 9 - func(7), func(7) = 7 - func(5),func(5) = 5 - func(3),func(3) = 3 -func(1),又因为func(1) = 3, 所以 func(3) = 0, func(5) = 5 ,func(7) = 2 ,func(9) = 7
不积小流无以成江河,不积跬步无以至千里。而我想要成为万里羊,就必须坚持学习来获取更多知识,用知识来改变命运,用博客见证成长,用行动证明我在努力。
如果我的博客对你有帮助、如果你喜欢我的博客内容,记得“点赞” “评论” “收藏”一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。