嵌入式软件工程师面试题——2025校招社招通用(C/C++)(三十九)

说明:

  • 面试群,群号: 228447240
  • 面试题来源于网络书籍,公司题目以及博主原创或修改(题目大部分来源于各种公司);
  • 文中很多题目,或许大家直接编译器写完,1分钟就出结果了。但在这里博主希望每一个题目,大家都要经过认真思考,答案不重要,重要的是通过题目理解所考知识点,好应对题目更多的变化;
  • 博主与大家一起学习,一起刷题,共同进步;
  • 写文不易,麻烦给个三连!!!

前面1-15已经是C/C++,但是由于前面写的比较混乱,把八股文和题目混在了一起,所以从这一篇开始重新整理重新写,前面1-15也就可以选看了,希望多多支持!

目录

1.指针常量、常量指针、指向常量的常量指针

2.使用指针的好处

3.指针和引用的异同,如何转换

4.二维数组

5.数组初始化

6.调用Free释放内存后,指针还能用吗

7.函数指针

8.指针不能加指针

9.空指针的指向哪里

10.数组声明和引用的下标

11.预处理器标识#error的目的是什么?

12.头文件中 #ifndef  #define  #endif


1.指针常量、常量指针、指向常量的常量指针

答案:

1.const int* p //常量指针------>指针指向的地址的内容不可以改变

2.Int const *p //常量指针

3.Int * const p // 指针常量------>指针指向的地址可以不改变

4.const int *  const p //指向常量的常量指针------>指针指向的地址和指向的内容都不可以改变

2.使用指针的好处

答案:

1.指针可以动态分配内存

2.在链表中可以方便修改链表的节点

3.解析字符串

4.相同类型的指针可以直接复制

3.指针和引用的异同,如何转换

答案:

1.都是指针的概念,指针保存的是内存的地址引用是某块内存的别名,这个内存一旦初始化就不能再去指向别的内存

2.两者都会占用内存

区别:

  1. 指针是实体,而引用是别名
  2. 引用的本质是指针常量,指向指针的地址不可以改变,指向地址的内容可以改变
  3. 自增表示的意义不同,指针自增表示地址自增,引用表示值自增
  4. 引用必须初始化
  5. 引用不能为空
  6. sizeof(引用)得到的是所指向的变量的大小,sizeof(指针)的到的是指针大小
  7. 引用不需要解引用

转换:

  1. 指针转引用:把指针用*就可以转换成对象,可以用在引用参数当中
  2. 引用转指针:把引用类型的对象用&取地址就获得指针了

4.二维数组

答案:

int a[3][3];

1.int a[3][3];表示是个三行三列的二维数组

2.数组名表示数组首元素的地址,即第0行第0个地址

3.a+1表示地址偏移一个一维数组的地址,即三列*int大小=3*4 = 12

4.*a 表示去二维变一维,*a就相当于一维数组的数组名,比如 *a +1 表示第0行下标为1的元素地址,只是偏移一个Int地址

5.若要表示a[2][2]的元素 即 *(*(a+2)+2)  

        //解释:

        a+2表示偏移2个一维数组, 地址

        *(a+2)表示去二维变一维数组    地址

        *(*(a+2)+2) 表示在一维的基础上偏移两个元素  数值

6.a[0] + 1// 相当于一维数组移动一个int地址,比如表示a[2][2]元素 *(a[2] + 2)

对于二维字符数组的初始化

char str[][2] ={“h”,”h”};

字符二维数组的初始化不能是字符,要是字符串

5.数组初始化

答案:

对于二维数组可以

Int num[][10]  第一个[]可以不填,但是第二个必须填,但是这个数组必须初始化

对于一维数组

Int num[] 这[]可以不填但是这个数组必须初始化

总结:

数组的最左边的[]可以不填,这个时候数组必须初始化,二维数组的第二个[]必须填,不管有没有初始化

6.调用Free释放内存后,指针还能用吗

答案:

Free释放掉内存后,只是把内存的使用权就被归还给系统,内存里面的东西可能被清除也可能是垃圾值,但是指向这个内存的指针还是指向这块内存,并不会NULL。

7.函数指针

答案:

int (*pf)(int)

函数指针调用函数事注意以下几点:

  1. 函数类型必须和函数指针的类型一样,比如参数类型,返回值
  2. 给函数指针赋值是可以&也可以不要

8.指针不能加指针

答案:

指针之间可以做减法,但不能做加法。

9.空指针的指向哪里

答案:

空指针是指指向地址为0的地方。

10.数组声明和引用的下标

答案:

声明下标只能是常量;

引用下标可以是整形常量,整形表达式,整形变量。

11.预处理器标识#error的目的是什么?

答案:

编译程序时,只要遇到#error就会生成一个编译错误提醒,并且停止编译。

语法格式:

        #error error-message

实例:

#ifdef xxx
#error “xxx has been defined”
#else
#endif

12.头文件中 #ifndef  #define  #endif

答案:

当项目中有多个c文件使用到同一个头文件是,在编译的时候会出现大量的变量,函数声明冲突,解决就是使用。

#ifndef _HEAR_H_
#define _HEAR_H_
#endif

说可以是自由命名的,但每个头文件的这个"标识"都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的 "." 也变成下划线,如stdio.h。

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值