C语言——八股文(笔试面试题)——持续更新

server/2024/11/28 7:07:29/

目录

更新日历:

1、 什么是数组指针,什么是指针数组?

 2、 什么是位段,什么是联合体

3、 什么是递归,什么是回调?

4、 什么是越界,什么是溢出?

5、#define和typedef的区别?

6、 Static与extern的作用?

7、 二级指针和二维数组有什么关系?

8、 栈内存,堆内存,数据区有啥区别?

9、 负数及浮点型数据在内存中是如何存放的?

10、 如何在代码中打印所在文件名,函数名及行号?

11、 局部变量能否和全局变量重名?

12、 如何引用一个已经定义过的全局变量?

13、 全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

14、 static全局变量与普通的全局变量有什么区别?static函数与普通函数有什么区别?

15、 写出float x 与“零值”比较的if语句。

16、 Struct与union的区别?

17、 关键字volatile有什么含义?并给出三个不同的例子

18、 C语言程序代码优化方法

19、 物理地址,虚拟地址,逻辑地址和总线地址的区别

20、 关键字const有什么含意

21、malloc(0) 的意义

22、#define DOUBLE(x) x+x

请问,int a = 5 * DOUBLE(5)

打印a的值为多少?

23、如果你有一对兔子,每一对兔子在第三个月开始每个月可以生下一对兔子,兔子不会死亡,请打印出每个月的对应的兔子总数

24、用两个队列实现栈的功能

25、一次遍历,判断长度为n的整形数组是否存在重复的元素(封装为函数)

26、判断一个长度为n的整形数据是无序的、重复、升序还是降序的


 小编也是学习者,出错了欢迎指正

更新日历:

 2024/11/1:22-26

1、 什么是数组指针,什么是指针数组?

数组指针:指向数组的指针
指针数组:数组中的元素都是指针

 2、 什么是位段,什么是联合体

   位段(Bit Field):在C语言中,允许在一个整数类型的数据结构中定义若干个长度为任意比特位的字段。
   联合体(Union):允许多种数据类型的变量共用同一块内存区域。

3、 什么是递归,什么是回调?

   递归:函数直接或间接地调用自身的过程。
   回调:一个函数作为参数传递给另一个函数,并由后者在适当的时候调用前者。

4、 什么是越界,什么是溢出?

   越界:访问超出数组或其他容器范围的元素。
   溢出:数值超过了其表示范围的最大值或最小值。

5、#define和typedef的区别?

#define:宏定义,用于创建常量、替换字符串等。

 typedef:类型别名,用于创建新的类型名称。

6、 Static与extern的作用?

   static:限制变量或函数的作用域。
   extern:声明外部链接性,可以在其他文件中使用该变量或函数。

7、 二级指针和二维数组有什么关系?

二级指针可以用来操作二维数组。例如,
int** ptr = (int**)malloc(sizeof(int*) * rows);`

8、 栈内存,堆内存,数据区有啥区别?

   栈内存:自动分配和释放,存储局部变量和函数调用信息。
   堆内存:动态分配和释放,通过new/malloc申请,delete/free释放。
   数据区:静态分配,存储全局变量和静态变量。

9、 负数及浮点型数据在内存中是如何存放的?

   负数通常采用补码形式存储。
   浮点数按照IEEE 754标准存储,分为符号位、指数位和尾数位。
    [负数及浮点型数据在内存中是如何存放的博文参考链接]

10、 如何在代码中打印所在文件名,函数名及行号?

使用预处理器宏__FILE__、__FUNCTION__和__LINE__。__FILE____func____LINE__eg: printf("%s-%s-%d\n", __FILE__,__func__,__LINE__);

11、 局部变量能否和全局变量重名?

可以,但局部变量会屏蔽同名的全局变量。

12、 如何引用一个已经定义过的全局变量?

直接使用变量名即可。

13、 全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

不建议这样做,因为会导致链接错误。应该在某个.C文件中定义,在头文件中声明。

14、 static全局变量与普通的全局变量有什么区别?static函数与普通函数有什么区别?

    static全局变量只在当前文件内有效。

​    static局部变量在整个程序运行期间都存在。


​    static函数只能在当前文件内部调用。

15、 写出float x 与“零值”比较的if语句。

// if (fabs(x) < FLT_EPSILON)    if ( x > 0.000001 && x < -0.000001)

16、 Struct与union的区别?

Struct:成员按顺序依次排列,每个成员有自己的空间。
Union:所有成员共享同一块内存空间。

17、 关键字volatile有什么含义?并给出三个不同的例子

volatile:指示编译器不要对变量进行优化,确保每次读写都是实际的硬件操作。

示例:

​      1. 外部设备寄存器
​      2. 共享内存
​      3. 实时系统中的信号

18、 C语言程序代码优化方法

- 减少不必要的计算
- 避免重复计算
- 使用更高效的数据结构
- 合理利用缓存

19、 物理地址,虚拟地址,逻辑地址和总线地址的区别

- 物理地址:内存的实际地址。
- 虚拟地址:操作系统提供的抽象地址。
- 逻辑地址:汇编语言中的地址。
- 总线地址:计算机总线上使用的地址。

20、 关键字const有什么含意

- const:声明变量或对象不可修改。

21、malloc(0) 的意义

在C语言中,malloc函数用于动态分配内存。
     根据C标准,malloc(0)的行为可能因编译器和系统而异。针对malloc(0)的调用, 可能会返回以下两种结果之一:
    1.返回一个非空指针:在这种情况下,该指针不能用于访问任何内存,但可以被传递给free函数以释放该块内存。这意味着malloc(0)返回的指针和正常返回的指针具有相同的属性,即你可以将其传递给free(而不会引|发错误。
    2.返回.NULL指针:在这种情况下,malloc(0)表示动态内存分配失败。此时,你需要检查返回的指针是否为NULL,以确保在使用该指针之前不会出现问题。

#include <stdio. h>
#include <stdlib. h>int main()                                                                                   { void *ptr-=mal1oc(0) ;if (ptr==NULL) {printf (' Memory allocation failed. \n' ); }else { printf(' Memoryallocation successed. \n'); //释放内存free(ptr); }return 0;
}

为了确保代码在不同的编译器和系统上正确运行,请始终检查malloc的返回值,而不是假定其
行为。这样,即使在malloc(0)返回非空指针或NULL指针的情况下,代码仍将正确运行。 

22、#define DOUBLE(x) x+x

请问,int a = 5 * DOUBLE(5)

打印a的值为多少?

a = 30;

23、如果你有一对兔子,每一对兔子在第三个月开始每个月可以生下一对兔子,兔子不会死亡,请打印出每个月的对应的兔子总数

我的实现方式是,给第一个月,第二个月,第三个月的兔子都定义一个变量,在while(1)里,

count计数,随着count++;第一个月的数量给第二个月,第二个月的数量加到第三个月,第三个月的数量先给第一个月之后*2;总数=第一个月的加第二个月的加第三个月的;月份就是count

没有具体实现;需要的可以评论

24、用两个队列实现栈的功能

思路:

  1. 全部入队1(入栈)
  2. 队1元素出队,留下最后一个元素,出队的元素入队2
  3. 队1留下的最后一个元素,出队(出栈)
  4. 循环上面入栈至出栈操作

25、一次遍历,判断长度为n的整形数组是否存在重复的元素(封装为函数)

个人还未想到好的解决思路

26、判断一个长度为n的整形数据是无序的、重复、升序还是降序的

思路:定义两个变量,一个count1一个temp(初始值都幅值为数组长度)count2 = 0;

循环遍历判断相近的两位的大小,如果 前一个<后一个 count1 +1

                                                              前一个>后一个 count1 - 1

                                                              前一个=后一个 count2 + 1

如果count1 + count2 = 2*temp 升序

        (temp-count1) + count2 = temp降序

        count2 = temp 重复

        其他情况 无序


http://www.ppmy.cn/server/137724.html

相关文章

Axure文本框读取和赋值高级交互

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;文本框赋值 主要内容&#xff1a;文本、文本域、时间等类型文本框读取和赋值、下拉列表读取和赋值 应用场景&#xff1a;新增数据、读取数据、修改…

【周末推荐】Windows无缝连接iPhone

关注“ONE生产力”&#xff0c;获取更多精彩推荐&#xff01; 又到了周末推荐时间了&#xff0c;今天我们介绍一个Windows内置的功能&#xff0c;能够帮助大家将自己的电脑和iPhone连接在一起。 很多用Windows的小伙伴羡慕macOS可以和iPhone无缝连接&#xff0c;轻松阅读和回…

从头开始学PHP之面向对象

首先介绍下最近情况&#xff0c;因为最近入职了且通勤距离较远&#xff0c;导致精力不够了&#xff0c;而且我发现&#xff0c;人一旦上了班&#xff0c;下班之后就不想再进行任何脑力劳动了&#xff08;对大部分牛马来说&#xff0c;精英除外&#xff09;。 话不多说进入今天的…

第12课 编码与数制

二进制起源于中国。上古奇书《易经》中就使用到了二进制。《易经》长期用来“卜筮”&#xff0c;对事态未来发展进行预测&#xff0c;俗称“算卦”。通过阳爻&#xff08;—&#xff09;和阴爻&#xff08;–&#xff09;说明天地、日月、人生、事物之间的变化法则&#xff0c;…

BGP路由优选+EVPN

BGP 的路由优选规则是一套多步决策链&#xff0c;用来确定在多个可行路由中选择最优的路由。BGP 是一种路径向量协议&#xff0c;通过这些优选规则&#xff0c;网络管理员可以控制数据流量的流向&#xff0c;确保网络的稳定性和效率。下面以一个实例来详细说明 BGP 的优选规则及…

文理学院数据库技术应用实验报告8

文理学院数据库技术应用实验报告8 实验名称数据聚合查询和分组查询实验日期2024年11月1日课程名称数据库技术应用实验项目数据聚合查询和分组查询 一、实验目的 聚合函数&#xff08;max、min、avg、sum、count&#xff09;分组查询&#xff08;group by子句、having子句&am…

Java 多线程(八)—— 锁策略,synchronized 的优化,JVM 与编译器的锁优化,ReentrantLock,CAS

前言 本文为 Java 面试小八股&#xff0c;一句话&#xff0c;理解性记忆&#xff0c;不能理解就死背吧。 锁策略 悲观锁与乐观锁 悲观锁和乐观锁是锁的特性&#xff0c;并不是特指某个具体的锁。 我们知道在多线程中&#xff0c;锁是会被竞争的&#xff0c;悲观锁就是指锁…

FPGA与ARM处理器在嵌入式系统中的融合设计!!!

FPGA&#xff08;现场可编程门阵列&#xff09;与ARM处理器在嵌入式系统中的融合设计是一种常见的做法&#xff0c;这种设计结合了FPGA的并行处理能力和高度可编程性与ARM处理器的通用计算能力。以下是FPGA与ARM处理器融合设计的概述&#xff1a; 1. 设计动机 并行处理&#…