当前位置: 首页 > news >正文

C语言笔试面试必刷题

🎊【面经】专题正在持续更新中,内含C语言,数据结构,Linux,网络编程等✨,欢迎大家前往订阅本专题,获取更多详细信息哦🎏🎏🎏

🪔本系列专栏 -  ​​​​​​面经

🍻欢迎大家  🏹  点赞👍  评论📨  收藏⭐️

📌个人主页 - 勾栏听曲_0的博客📝

🔑希望本文能对你有所帮助,如有不足请指正,共同进步吧🏆

🎇须知少日拏云志,曾许人间第一流。

目录

关键字

数组与指针

各类定义

结构体、共用体、枚举

排序算法


关键字

        谈谈static的作用?

        在C语言中,static关键字有多种作用。首先,它可以用于隐藏全局变量或函数,这在同时编译多个文件时非常有用。其次,static还可以用于修饰局部变量和全局变量,这些变量在整个程序运行期间都存在,且只有一份拷贝,而且这些变量只在当前文件下可见,其他文件无法引用这些变量。static修饰的未初始化的全局或局部变量存储在.data,static修饰的已初始化的全局或局部变量存储在.bss段。

        谈谈const的作用?

        在C语言中,const关键字的主要作用是限定一个变量不允许被改变,产生静态作用。

        编译器一般不为const变量分配内存,而是将它保存在符号表中,这使得它成为一个编译期间的值,没有了存储与读内存的操作。

        谈谈volatile的作用?

        volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。

        const和volatile是否可以同时修饰一个变量?有什么特殊含义?

        可以放一起修饰一个变量。

        同时修饰一个变量的含义表示一个变量在程序编译期不能被修改且不能被优化;在程序运行期,变量值可修改,但每次用到该变量的值都要从内存中读取,以防止意外错误。

        sizeof与strlen的区别?

        他们都是用于计算内存大小的。sizeof是C语言中的一个运算符,而strlen是一个函数;sizeof考研用于任意类型的数据,而strlen只能用于以空字符结尾的"/0"的字符串;sizeof计算的是类型或变量所占用的内存字节数('\0'计入),而strlen计算的是字符串中的字符个数(遇到'\0'截止,且'\0'不计入);sizeof在编译时就能确定结果,而strlen在运行时才能确定结果。

数组与指针

        数组与指针的区别 ?

        定义与初始化:数组是一种数据结构,用来存储多个相同类型的数据,他的大小在定义的时候就已经确定了,而且不能改变。指针是一种变量,存储的是一个地址,这个地址指向另一个变量或者内存空间,他的大小取决于相同的位数(32位系统位4字节,64位系统为8字节)。

        存储方式:数组一般存储在静态区或者栈上,他的地址是连续的,可以用下标访问;指针考研存储在任何地方,地址不连续,可以用解引用符*来访问。

        可变性:数组名是一个常量,指向数组的首地址,不能被赋值和修改;指针是一个变量,考研被赋值或修改,考研指向不同的地址空间。

        谈一谈数组指针与指针数组?

        数组指针和指针数组是两种不同的数据类型。数组指针本质是一个指针,它指向一个数组,也就是说它存储的是一个数组的地址。指针数组是一个数组,它的元素都是指针,也就是说它存储的是多个地址。

        数组指针的声明方式是类型 (*指针名) [长度]。指针数组的声明方式是类型 *数组名 [长度]。

        数组指针的大小取决于系统的位数,一般为4字节或8字节。指针数组的大小取决于数组的长度和元素类型,一般为长度乘以4字节或8字节。

       数组指针可以通过解引用符*来访问或修改它所指向的数组,例如(*p)[0] = 1表示将p所指向的数组的第一个元素赋值为1。指针数组可以通过下标来访问或修改它的元素,例如p[0] = &a表示将p的第一个元素赋值为变量a的地址。

        数组指针可以用于作为函数参数传递多维数组,例如void func(int (*p)[10])表示func函数接受一个包含10个int元素的一维数组或者一个包含10列的二维数组作为参数。指针数组可以用于存储不同长度或类型的数据,例如字符串或结构体等。

        一维数组与二维数组用指针怎么表示?

        如果有一个一维数组int a[5] = {1, 2, 3, 4, 5};,那么可以用一个指针int *p = a;来表示它。通过指针和下标可以访问或修改数组中的元素,例如p[0] = 10;表示将数组第一个元素赋值为10。

        如果有一个二维数组int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};,那么可以用一个指向数组的指针int (*p)[4] = a;来表示它。通过指针和下标可以访问或修改二维数组中的元素,例如p[0][0] = 10;表示将二维数组第一个一维数组的第一个元素赋值为10。

        指针占的字节数?

        指针是一种变量,它可以存储一个地址,指向另一个变量或内存空间。指针的大小取决于系统的位数和计算机的架构。

        在32位系统中,指针通常占用4个字节,因为内存地址可以用32位二进制数表示。

        在64位系统中,指针通常占用8个字节,因为内存地址可以用64位二进制数表示。

        谈一谈函数指针与指针函数?

        函数指针与指针函数是两种不同的数据类型。函数指针是一个指针,指向一个函数,他存储的是一个函数的地址;指针函数是一个函数,返回值是一个指针。

        函数指针的声明方式是类型说明符 (*函数名) (参数),例如int (*fun) (int x, int y)表示fun是一个指向有两个int类型参数和int类型返回值的函数的指针。指针函数的声明方式是类型 *函数名 (参数),例如int *fun (int x, int y)表示fun是一个有两个int类型参数和返回一个int类型指针的函数。

        函数指针的大小取决于系统的位数,一般为4字节或8字节。指针函数的大小取决于函数的定义,一般为函数体中语句所占用的字节数。

各类定义

定义一个整型数

int a;

定义一个指向整型数的指针

int *p;

定义一个指向指针的指针,他指向的指针指向一个整型数

int **p;

定义一个有10个整型数的数组

int arr[10];

定义一个有10个指针的数组,该指针指向一个整型数(指针数组)

int *arr[10];

定义一个指向有10个整型数数组的指针(数组指针)

int (*arr)[10];

定义一个指向函数的指针,该函数有一个整型数参数并返回以后整型数(函数指针)

int (*fun)(int );

定义一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(指针函数)

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

结构体、共用体、枚举

谈一谈你会结构体,共用体,枚举的看法?

        结构体是由多个不同类型的成员变量组成的数据类型,它可以用来表示具有多种属性的对象或记录。结构体的每个成员都占用独立的内存空间,结构体的总大小等于或大于各个成员的大小之和。结构体可以通过.运算符来访问或修改其成员变量的值。

        共用体是由多个不同类型的成员变量组成的数据类型,它可以用来表示多种可能性的数据。共用体的所有成员都共享同一块内存空间,共用体的总大小等于最大成员的大小。共用体只能存储其中一个成员变量的值,其他成员变量的值会被覆盖或无效。共用体也可以通过.运算符来访问或修改其成员变量的值。

        枚举是由一组有名字的整数常量组成的数据类型,它可以用来表示一些固定或有限的选项。枚举的每个常量都有一个默认或指定的整数值,枚举的总大小等于一个整数类型的大小。枚举可以通过其名字来访问或赋值其常量值,也可以通过强制类型转换来获取其整数值。

        在嵌入式系统开发中,枚举一般用于哪些地方?

        为固定的值命名,提高代码的可读性和可维护性。例如,为GPIO的输入输出模式、定时器的工作模式、串口的波特率等定义枚举值,使代码更加直观和清晰。

        作为数组访问的下标,方便管理数据。例如,为汽车故障诊断的PID参数、传感器的数据类型、协议的帧类型等定义枚举值,然后用枚举值作为数组的下标,可以快速地存取数据。

        作为函数参数或返回值,约束输入输出范围。例如,为中断处理函数、状态机函数、配置函数等定义枚举类型的参数或返回值,可以限制输入输出只能在枚举值的范围内,避免错误或异常。

        作为设置值或标志位,控制程序流程。例如,为系统的工作状态、错误类型、事件类型等定义枚举值,然后用枚举值作为设置值或标志位,可以控制程序的分支或循环。

        写一段代码片段本机器是大端还是小端? 

        我可以利用共用体(联合体)的特性来判断机器大小端,联合体中的不同成员共享同一块内存空间,因此可以通过访问不同类型的成员来判断字节的顺序。

#include <stdio.h>// 定义一个联合体类型
union Test {int a; // 4字节char b; // 1字节
};// 定义一个判断函数,返回1表示大端,返回0表示小端
int is_big_endian() {union Test t; // 创建一个联合体变量t.a = 0x01020304; // 给a赋值为16进制数if (t.b == 0x01) { // 如果b等于最高位字节return 1; // 表示大端} else { // 否则return 0; // 表示小端}
}int main() {if (is_big_endian()) { // 调用判断函数printf("本机器是大端\n"); // 输出结果} else {printf("本机器是小端\n");}return 0;
}

排序算法

        各种排序算法的时间复杂度,最小与最大时间复杂度,空间复杂度,稳不稳定


        🍻各路大神,还有什么在笔试面试中遇到的问题欢迎补充说明,说不定下次文章更新中就有你提出的问题哦

相关文章:

C语言笔试面试必刷题

&#x1f38a;【面经】专题正在持续更新中&#xff0c;内含C语言&#xff0c;数据结构&#xff0c;Linux&#xff0c;网络编程等✨&#xff0c;欢迎大家前往订阅本专题&#xff0c;获取更多详细信息哦&#x1f38f;&#x1f38f;&#x1f38f; &#x1fa94;本系列专栏 - ​​…...

window11安装Python环境

python环境安装 访问Python官网:https://www.python.org/ 点击downloads按钮&#xff0c;在下拉框中选择系统类型(windows/Mac OS/Linux等) 选择下载最新版本的Python cmd命令如果出现版本号以及>>>则表示安装成功 如果出现命令行中输入python出现如下错误 可能…...

SpringBoot中的日志使用

SpringBoot的默认使用 观察SpringBoot的Maven依赖图 可以看出来&#xff0c;SpringBoot默认使用的日志系统是使用Slf4j作为门户&#xff0c;logback作为日志实现 编写一个测试代码看是否是这样 SpringBootTest class SpringbootLogDemoApplicationTests {//使用Slf4j来创建LOG…...

微信小程序中监听横屏竖屏

直接上代码 第一步&#xff1a;在你想要监听页面的json文件中添加此节点 "pageOrientation": "auto" 第二步&#xff1a;wx.onWindowResize() page&#xff08;{ onLoad() {this.kstd()},kstd(){ // 监听屏幕旋转事件 wx.onWindowResize((res)>{// …...

云原生概述

1. 何谓云原生 云原生是一种构建和运行应用程序的方法&#xff0c;是一套技术体系和方法论。云原生&#xff08;CloudNative&#xff09;是一个组合词&#xff0c;CloudNative。Cloud表示应用程序位于云中&#xff0c;而不是传统的数据中心&#xff1b;Native表示应用程序从设…...

消失的它:网络层分片包中的第一个分片包去哪了?

在网络层IP包分片的过程中&#xff0c;遇到了大麻烦&#xff01; 主机A&#xff1a; IP地址&#xff1a;192.168.0.10/24 MAC地址&#xff1a;02:00:00:00:00:10 主机B&#xff1a; IP地址&#xff1a;192.168.0.20/24 MAC地址&#xff1a;02:00:00:00:00:20 MTU&#xff1a;1…...

LeetCode刷题---有效的括号

这里用到了栈的思想 栈(stack)是限定仅在表尾进行插入或者删除的线性表。对于栈来说&#xff0c;表尾端称为栈顶&#xff08;top&#xff09;&#xff0c;表头端称为栈低&#xff08;bottom&#xff09;。不含元素的空表称为空栈。因为栈限定在表尾进行插入或者删除&#xff0c…...

QT学习笔记-QT访问各种关系数据库笔记汇总

QT学习笔记-QT访问各种关系数据库笔记汇总 1、QT访问Oracle数据库2、QT访问SQLServer数据库3、QT访问MySQL数据库4、QT访问PostgreSQL数据库5、QT访问Access数据库6、QT多线程中访问数据库的要点 在使用QT进行应用开发过程中&#xff0c;不可避免的会涉及到访问关系数据库&…...

Shell脚本-常用命令

Shell 脚本 Shell 脚本&#xff08;shell script&#xff09;&#xff0c;是一种为 shell 编写的脚本程序。 业界所说的 shell 通常都是指 shell 脚本&#xff0c;但读者朋友要知道&#xff0c;shell 和 shell script 是两个不同的概念。 由于习惯的原因&#xff0c;简洁起见&a…...

Flink之输出算子Redis Sink

Redis Sink Redis Sinkjedis实现添加依赖自定义Redis Sink使用Sink验证 开源 Redis Connector添加依赖自定义Redis SinkRedisCommandString数据类型示例Hash数据类型示例 使用SinkRedisStringSinkRedisHashSink 验证 Redis Sink 在新版Flink的文档中&#xff0c;并没有发现Redi…...

【数据结构】顺序表实现通讯录

前言 在上一节中我们实现了顺序表&#xff0c;现在我们将使用顺序表完成通讯录的实现。&#xff08;注&#xff1a;本人水平有限&#xff0c;“小屎山”有些许bug&#xff0c;代码冗余且语无伦次&#xff0c;望谅解&#xff01;&#x1f605;&#xff09; 文章目录 一、数据结构…...

JMeter 随机数生成器简介:使用 Random 和 UUID 算法

在压力测试中&#xff0c;经常需要生成随机值来模拟用户行为。JMeter 提供了多种方式来生成随机值&#xff0c;本文来具体介绍一下。 随机数函数 JMeter 提供了多个用于生成随机数的函数&#xff0c;其中最常用的是 __Random 函数。该函数可以生成一个指定范围内的随机整数或…...

vue3 更换 elemnt-ui / element-plus 版本npm命令

1. 安装 / 更换 element-ui 版本 [ 在 后面指定想要安装的版本 ] //卸载当前版本 npm uninstall element-ui //安装指定版本 npm i element-ui2.4.8 -S --legacy-peer-deps 2. 安装 / 更换 element-plus 版本 [ 在 后面指定想要安装的版本 ] npm install element-plus2.3…...

react.js 手写响应式 reactive

Redux 太繁琐&#xff0c;Mbox 很酷但我们可能没必要引入新的包&#xff0c;那就让我们亲自在 react.js 中通过代理实现一套钩子来达到类似 vue 的响应式状态&#xff1a; 实现 reactive hooks 代理类声明 代理状态的类应当提供可访问的状态&#xff0c;和订阅变化的接口。 …...

代码随想录打卡第四十六天|完全背包 ● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ

完全背包理论 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 完全背包和01背包问题唯一…...

【BP-Adaboost预测】基于BP神经网络的Adaboost的单维时间序列预测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Origami Studio for Mac:塑造未来,掌握原型设计之巅

在当今高度竞争的设计领域&#xff0c;原型设计的重要性不言而喻。它不仅是沟通想法&#xff0c;也是测试和改进设计的关键环节。而现在&#xff0c;一款强大的原型设计工具——Origami Studio for Mac&#xff0c;正在席卷设计界&#xff0c;以其独特的功能和卓越的性能&#…...

UML类图中各箭头表示总结

UML类图中各箭头表示总结 1、泛化2、实现3、依赖4、关联5、聚合6、组合 在UML类图中&#xff0c;箭头关系是用来表示类之间的关系的。箭头关系的种类有以下几种&#xff1a; 1、泛化 泛化&#xff1a;表示类之间的继承关系。箭头从子类指向父类。箭头&#xff1a;实线空心三角…...

神经网络量化----为了部署而特别设计

引言:一般神经网络量化有两个目的: 为了加速,在某些平台上浮点数计算比较耗费时间,替换为整形可以加快运算为了部署,某些平台上只支持整形运算,比如在芯片中如果是第1个目的,则使用常规的量化手段就可以满足,将浮点数运算变成整形运算+较少的浮点运算 但是如果是第2个目…...

代码随想录算法训练营Day60|单调栈01

代码随想录算法训练营Day60|单调栈01 文章目录 代码随想录算法训练营Day60|单调栈01一、739. 每日温度二、496.下一个更大元素 I 一、739. 每日温度 class Solution {public int[] dailyTemperatures(int[] temperatures) {//单调栈int lenstemperatures.length;int result[]n…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...