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…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...