首页/文章/ 详情

这几道C语言面试题,希望对你有帮助

3年前浏览514
毕业即失业,不知道现在还流行这句话不,反正我们当时毕业的时候,流行这句话,也让人很慌。

言归正传,毕业季,为大家分享一些关于C语言的面试题。

1用变量 a 给出下面的定义

a.一个有10个指针的数组,该指针是指向一个整型数的;

b.一个指向有10个整型数数组的指针;

c.一个指向函数的指针,该函数有一个整型参数并返回一个整型数;

d.一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数;

答案:




int * a[10];int (*a)[10]                                 int (*a)(int);int (*a[10])(int);

2写一段代码计算结构体、联合、位段、内存大小

答案:










struct A{  int a;  char b;  float c;  struct A d;  double e;};
sizeof(A)

3代码改错

下面代码涉及到动态内存开辟,请改正下面错误代码:







wap( int* p1,int* p2 ){  int * p;  *p = *p1;  *p1 = *p2;  *p2 = *p;}
答案:p 为野指针(指向一个已删除的对象或未申请访问受限内存区域的指针)







void swap(int *pa, int *pb){  int tmp;  tmp = *pa;  *pa = *pb;  *pb = tmp;}

4数组和链表的区别?

数组:数据顺序存储,固定大小;
链表:数据可以随机存储,大小可动态改变;

5要对绝对地址0x100000赋值

要对绝对地址0x100000赋值,我们可以用:

(unsigned int*)0x100000 = 1234;
那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做?

答案:





*((void (*)( ))0x100000)();
(void (*)())0x100000  //首先要将0x100000强制转换成函数指针
*((void (*)())0x100000)(); //然后再调用它:

6const 有什么用途?

答案:
1.可以定义 const 常量;
2.const 可以修饰函数的参数、返回值,甚至函数的定义体。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

7(void *)ptr 和(*(void**))ptr 的结果是否相同?

其中ptr为同一个指针。

答案:
他们的值相同。

8

用#define声明一个常数,表明1年中有多少秒(忽略闰年问题)?

答案:


#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL


要点:
A.没有以分号结束;
B.懂得预处理器将为你计算常数表达式的值。即60 * 60 * 24 * 365而不是31536000.
C.考虑到了16位机将会溢出,巧妙运用了UL。

9

写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个?

答案:


#define MIN(A,B) ((A) <= (B) ? (A) : (B))


要点:
A.参数用括号括起来;
B.考察能否合理运用条件运算符;

10

Heap与Stack的差别?

答案:Heap是堆,Stack是栈。


Stack的空间由系统自动分配/释放,Heap上的空间手动分配/释放。


Stack空间有限,Heap是很大的自由存储区,malloc函数分配的内存空间即在堆上。


网上经典例子:













int a = 0; //全局初始化区 char *p1;//全局未初始化区 void main(void){  int b; //栈   char s[] = "abc"; //栈   char *p2; //栈   char *p3 = "123456"; //123456\0在常量区,p3在栈上  static int c =0; //全局(静态)初始化区   p1 = (char *)malloc(10); //堆   p2 = (char *)malloc(20); //堆 }


11

下面的声明都是什么意思?

代码:






const int a;int const a;const int *a;int * const a;int const * a const;


答案:
A.前两个的作用是一样,a是一个常整型数;

B.第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以);

C.第四个意思a是一个指向整型 数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的);

D.最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数 是不可修改的,同时指针也是不可修改的)。

12

sizeof和strlen的区别?

答案:sizeof是运算符,在编译时即计算好了;而strlen是函数,要在运行时才能计算。

编排 | strongerHuang

微信公 众 号 | 嵌入式专栏

—— The End ——
来源:8号线攻城狮
理论通用
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-06-15
最近编辑:3年前
8号线攻城狮
本科 干一行,爱一行
获赞 65粉丝 112文章 1057课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈