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位二进制数表示。
谈一谈函数指针与指针函数?
函数指针与指针函数是两种不同的数据类型。函数指针是一个指针,指向一个函数,他存储的是一个函数的地址;指针函数是一个函数,返回值是一个指针。
函数指针的声明方式是
函数指针的大小取决于系统的位数,一般为4字节或8字节。指针函数的大小取决于函数的定义,一般为函数体中语句所占用的字节数。类型说明符 (*函数名) (参数)
,例如int (*fun) (int x, int y)
表示fun是一个指向有两个int类型参数和int类型返回值的函数的指针。指针函数的声明方式是类型 *函数名 (参数)
,例如int *fun (int x, int y)
表示fun是一个有两个int类型参数和返回一个int类型指针的函数。
各类定义
定义一个整型数
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语言笔试面试必刷题
🎊【面经】专题正在持续更新中,内含C语言,数据结构,Linux,网络编程等✨,欢迎大家前往订阅本专题,获取更多详细信息哦🎏🎏🎏 🪔本系列专栏 - …...

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

SpringBoot中的日志使用
SpringBoot的默认使用 观察SpringBoot的Maven依赖图 可以看出来,SpringBoot默认使用的日志系统是使用Slf4j作为门户,logback作为日志实现 编写一个测试代码看是否是这样 SpringBootTest class SpringbootLogDemoApplicationTests {//使用Slf4j来创建LOG…...
微信小程序中监听横屏竖屏
直接上代码 第一步:在你想要监听页面的json文件中添加此节点 "pageOrientation": "auto" 第二步:wx.onWindowResize() page({ onLoad() {this.kstd()},kstd(){ // 监听屏幕旋转事件 wx.onWindowResize((res)>{// …...

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

消失的它:网络层分片包中的第一个分片包去哪了?
在网络层IP包分片的过程中,遇到了大麻烦! 主机A: IP地址:192.168.0.10/24 MAC地址:02:00:00:00:00:10 主机B: IP地址:192.168.0.20/24 MAC地址:02:00:00:00:00:20 MTU:1…...

LeetCode刷题---有效的括号
这里用到了栈的思想 栈(stack)是限定仅在表尾进行插入或者删除的线性表。对于栈来说,表尾端称为栈顶(top),表头端称为栈低(bottom)。不含元素的空表称为空栈。因为栈限定在表尾进行插入或者删除,…...
QT学习笔记-QT访问各种关系数据库笔记汇总
QT学习笔记-QT访问各种关系数据库笔记汇总 1、QT访问Oracle数据库2、QT访问SQLServer数据库3、QT访问MySQL数据库4、QT访问PostgreSQL数据库5、QT访问Access数据库6、QT多线程中访问数据库的要点 在使用QT进行应用开发过程中,不可避免的会涉及到访问关系数据库&…...
Shell脚本-常用命令
Shell 脚本 Shell 脚本(shell script),是一种为 shell 编写的脚本程序。 业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。 由于习惯的原因,简洁起见&a…...
Flink之输出算子Redis Sink
Redis Sink Redis Sinkjedis实现添加依赖自定义Redis Sink使用Sink验证 开源 Redis Connector添加依赖自定义Redis SinkRedisCommandString数据类型示例Hash数据类型示例 使用SinkRedisStringSinkRedisHashSink 验证 Redis Sink 在新版Flink的文档中,并没有发现Redi…...

【数据结构】顺序表实现通讯录
前言 在上一节中我们实现了顺序表,现在我们将使用顺序表完成通讯录的实现。(注:本人水平有限,“小屎山”有些许bug,代码冗余且语无伦次,望谅解!😅) 文章目录 一、数据结构…...

JMeter 随机数生成器简介:使用 Random 和 UUID 算法
在压力测试中,经常需要生成随机值来模拟用户行为。JMeter 提供了多种方式来生成随机值,本文来具体介绍一下。 随机数函数 JMeter 提供了多个用于生成随机数的函数,其中最常用的是 __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 太繁琐,Mbox 很酷但我们可能没必要引入新的包,那就让我们亲自在 react.js 中通过代理实现一套钩子来达到类似 vue 的响应式状态: 实现 reactive hooks 代理类声明 代理状态的类应当提供可访问的状态,和订阅变化的接口。 …...
代码随想录打卡第四十六天|完全背包 ● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ
完全背包理论 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。 完全背包和01背包问题唯一…...

【BP-Adaboost预测】基于BP神经网络的Adaboost的单维时间序列预测研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

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

UML类图中各箭头表示总结
UML类图中各箭头表示总结 1、泛化2、实现3、依赖4、关联5、聚合6、组合 在UML类图中,箭头关系是用来表示类之间的关系的。箭头关系的种类有以下几种: 1、泛化 泛化:表示类之间的继承关系。箭头从子类指向父类。箭头:实线空心三角…...
神经网络量化----为了部署而特别设计
引言:一般神经网络量化有两个目的: 为了加速,在某些平台上浮点数计算比较耗费时间,替换为整形可以加快运算为了部署,某些平台上只支持整形运算,比如在芯片中如果是第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…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...