C语言经典面试题目(十六)
1、什么是C语言中的指针常量和指针变量?它们有什么区别?
在C语言中,指针常量和指针变量是指针的两种不同类型。它们的区别在于指针的指向和指针本身是否可以被修改。
-
指针常量:指针指向的内存地址不可变,但指针本身的值(即指针变量)可以变化。一旦指针被初始化为某个地址,就无法修改它指向的地址,但可以改变指针的值为其他地址。
int *const ptr; // ptr是一个指针常量,指向int类型的数据 int x = 10; ptr = &x; // 合法,初始化ptr为x的地址 *ptr = 20; // 合法,通过ptr修改x的值为20 -
指针变量:指针指向的内存地址和指针本身的值都可以变化。可以通过指针变量来修改指针指向的地址,也可以修改指针本身的值。
int *ptr; // ptr是一个指针变量,指向int类型的数据 int x = 10; ptr = &x; // 合法,初始化ptr为x的地址 int y = 20; ptr = &y; // 合法,修改ptr的值为y的地址
2、如何在C语言中实现字符串的查找和替换操作?
在C语言中,可以使用标准库函数来实现字符串的查找和替换操作。常用的函数包括:
- strstr:用于在字符串中查找子串的出现位置。
- strchr:用于在字符串中查找特定字符的出现位置。
- strrchr:用于在字符串中查找特定字符的最后一次出现位置。
- strtok:用于分割字符串为多个子串。
- strcspn:用于查找字符串中第一个不包含在指定字符集合中的字符的位置。
以下是一个简单的示例,演示了如何实现字符串的查找和替换操作:
#include <stdio.h>
#include <string.h>int main() {char str[] = "hello world";char *ptr = strstr(str, "world");if (ptr != NULL) {printf("Substring found at position: %ld\n", ptr - str);} else {printf("Substring not found\n");}char newStr[] = "goodbye";strncpy(ptr, newStr, strlen(newStr)); // 替换字符串printf("Modified string: %s\n", str);return 0;
}
3、C语言中的函数指针数组有什么作用?请举例说明。
函数指针数组用于存储多个函数指针,使得可以根据需要动态选择调用哪个函数。常见的应用场景包括菜单选择、回调函数等。
以下是一个示例,演示了如何使用函数指针数组实现菜单选择:
#include <stdio.h>void func1() {printf("You selected option 1\n");
}void func2() {printf("You selected option 2\n");
}void func3() {printf("You selected option 3\n");
}int main() {void (*menu[3])() = {func1, func2, func3}; // 函数指针数组int choice;printf("Enter your choice (1-3): ");scanf("%d", &choice);if (choice >= 1 && choice <= 3) {menu[choice - 1](); // 调用选择的函数} else {printf("Invalid choice\n");}return 0;
}
4、C语言中的文件读写模式有哪些?请列举几个常用的文件读写模式。
C语言中常用的文件读写模式包括:
- “r”:只读模式,文件必须存在,指针位于文件开头。
- “w”:写入模式,文件不存在时创建新文件,文件存在时清空文件内容,指针位于文件开头。
- “a”:追加模式,文件不存在时创建新文件,文件存在时保留原内容,在文件末尾添加新内容,指针位于文件末尾。
- “r+”:读写模式,文件必须存在,指针位于文件开头。
- “w+”:读写模式,文件不存在时创建新文件,文件存在时清空文件内容,指针位于文件开头。
- “a+”:读写模式,文件不存在时创建新文件,文件存在时保留原内容,在文件末尾添加新内容,指针位于文件末尾。
5、如何在C语言中实现哈夫曼树数据结构?
哈夫曼树是一种经典的数据结构,用于实现最优编码。在C语言中,可以通过二叉树的方式实现哈夫曼树。哈夫曼树的构建通常是通过构建哈夫曼树的算法来实现的,其中最常见的是哈夫曼编码算法。
以下是一个简单的示例,演示了如何实现哈夫曼树的构建:
#include <stdio.h>
#include <stdlib.h>typedef struct Node {int frequency;char data;struct Node *left;struct Node *right;
} Node;Node *createNode(int frequency, char data) {Node *node = (Node *)malloc(sizeof(Node));node->frequency = frequency;node->data = data;node->left = NULL;node->right = NULL;return node;
}void printTree(Node *root) {if (root != NULL) {printf("%c(%d) ", root->data, root->frequency);printTree(root->left);printTree(root->right);}
}int main() {Node *node1 = createNode(5, 'a');Node *node2 = createNode(10, 'b');Node *node3 = createNode(15, 'c');Node *node4 = createNode(20, 'd');Node *node5 = createNode(25, 'e');Node *node6 = createNode(30, 'f');node5->left = node1;node5->right = node2;node6->left = node3;node6->right = node4;Node *root = createNode(node5->frequency + node6->frequency, '*');root->left = node5;root->right = node6;printf("Huffman tree: ");printTree(root);printf("\n");return 0;
}
在上面的示例中,创建了几个节点表示字符和频率,然后根据哈夫曼算法构建了哈夫曼树,并打印了该哈夫曼树的结构。
相关文章:
C语言经典面试题目(十六)
1、什么是C语言中的指针常量和指针变量?它们有什么区别? 在C语言中,指针常量和指针变量是指针的两种不同类型。它们的区别在于指针的指向和指针本身是否可以被修改。 指针常量:指针指向的内存地址不可变,但指针本身的…...
【C语言】文件操作揭秘:C语言中文件的顺序读写、随机读写、判断文件结束和文件缓冲区详细解析【图文详解】
欢迎来CILMY23的博客喔,本篇为【C语言】文件操作揭秘:C语言中文件的顺序读写、随机读写、判断文件结束和文件缓冲区详细解析【图文详解】,感谢观看,支持的可以给个一键三连,点赞关注收藏。 前言 欢迎来到本篇博客&…...
JAVA八股文面经问题整理第6弹
文章目录 目录 文章目录 提问问题 问题1 问题2 问题3 问题4 问题5 问题6 问题7 问题8 问题9 问题10 问题11 问题12 写在最后 提问问题 介绍一下Linux常⽤命令,例如:Vim快捷键,常⽤查看Log的命令,路径相关&#x…...
pytest相关面试题
pytest是什么?它有什么优点? pytest是一个非常流行的Python测试框架,它具有简洁、易用、高校等优点。他可以帮助测试人员方便地编写和运行测试用例,并且提供了丰富的插件和扩展,支持各种测试需求介绍下pytest常用的库 …...
Keras库搭建神经网络
Keras并非简单的神经网络库,而是一个基于Theano的强大的深度学习库,利用它不仅仅可以搭建普通的神经网络,还可以搭建各种深度学习模型,如自编码器、循环神经网络、递归神经网络、卷积神经网络等。 安装代码: pip ins…...
适配器模式与桥接模式-灵活应对变化的两种设计策略大比拼
🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🚀 转载自:设计模式深度解析:适配器模式与桥接模式-灵活应对变…...
Elasticsearch8搭建及Springboot中集成使用
1.搭建 1.1.下载地址 Elasticsearch:https://www.elastic.co/cn/downloads/elasticsearch Kibana:https://www.elastic.co/cn/downloads/kibana 1.2.具体过程 下载安装包:访问上述链接,下载适合你操作系统的Elasticsearch和Ki…...
asp.net在线租车平台
说明文档 运行前附加数据库.mdf(或sql生成数据库) 主要技术: 基于asp.net架构和sql server数据库 功能模块: asp.net在线租车平台 用户功能有首页 行业新闻用户注册车辆查询租车介绍访问后台 后台管理员可以进行用户管理 管…...
Beamer模板——基于LaTeX制作学术PPT
Beamer模板——基于LaTeX制作学术PPT 介绍Beamer的基本使用安装和编译用于学术汇报的模板项目代码模板效果图 Beamer的高级特性动态效果分栏布局定理环境 介绍 在学术领域,演示文稿是展示和讨论研究成果的重要方式。传统的PowerPoint虽然方便,但在处理复…...
性能测试-Jmeter中IF控制器使用
一、Jmeter控制器 分为两种类型: 控制测试计划执行过程中节点的逻辑执行顺序,如:循环控制器,if控制器等对测试计划中的脚本进行分组,方便Jmeter统计执行结果以及进行脚本的运行时控制等,如:吞…...
华为综合案例-普通WLAN全覆盖配置(2)
组网图 结果验证 在AC_1和AC_2上执行display ap all命令,检查当前AP的状态,显示以下信息表示AP上线成功。[AC_1] display ap all Total AP information: nor : normal [1] ExtraInfo : Extra information P : insufficient power supply ---…...
这里是一本关于 DevOps 企业级 CI/CD 实战的书籍...
文章目录 📋 前言🎯 什么是 DevOps🎯 什么是 CI/CD🎯什么是 Jenkins🧩 Jenkins 简单案例 🎯 DevOps 企业级实战书籍推荐🔥 参与方式 📋 前言 企业级 CI/CD 实战是一个涉及到软件开发…...
机器学习 - save和load训练好的模型
如果已经训练好了一个模型,你就可以save和load这模型。 For saving and loading models in PyTorch, there are three main methods you should be aware of. PyTorch methodWhat does it do?torch.saveSaves a serialized object to disk using Python’s pickl…...
【动态规划】【同余前缀和】【多重背包】[推荐]2902. 和带限制的子多重集合的数目
本文涉及知识点 动态规划汇总 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 C算法:滑动窗口总结 多重背包 LeetCode2902. 和带限制的子多重集合的数目 给你一个下标从 0 开始的非负整数数组 nums 和两个整数 l 和 r 。 请你…...
nginx介绍及搭建
架构模型 Nginx是由一个master管理进程、多个worker进程组成的多进程模型。master负责管理worker进程,worker进程负责处理网络事件,整个框架被设计为一种依赖事件驱动、异步、非阻塞的模式。 优势: 1、充分利用多核,增强并发处理…...
树莓派夜视摄像头拍摄红外LED灯
NoIR相机是一种特殊类型的红外摄像头,其名称来源于"No Infrared"的缩写。与普通的彩色摄像头不同,NoIR相机具备红外摄影和低光条件下摄影的能力。 一般摄像头能够感知可见光,并用于普通摄影和视频拍摄。而NoIR相机则在设计上去除了…...
Oracle19C静默安装教程
文章目录 一、安装前的准备1、安装Linux操作系统2、配置网络源或者本地源3、hosts文件配置 二、准备安装环境1、安装依赖包2、创建oracle用户组3、配置系统内核参数4、关闭selinux5、配置oracle用户环境6、修改用户的Shell限制 三、静默安装Oracle数据库1、创建oracle安装目录2…...
【机器学习】基于粒子群算法优化的BP神经网络分类预测(PSO-BP)
目录 1.原理与思路2.设计与实现3.结果预测4.代码获取 1.原理与思路 【智能算法应用】智能算法优化BP神经网络思路【智能算法】粒子群算法(PSO)原理及实现 2.设计与实现 数据集: 多输入多输出:样本特征24,标签类别4…...
Sora后时代文生视频的探索
一、写在前面 按常理,这里应该长篇大论地介绍一下Sora发布对各行业各方面产生的影响。不过,这类文章已经很多了,我们今天主要聊聊那些已经成熟的解决方案、那些已经可以“信手拈来”的成果,并以此为基础,看看Sora发布…...
指南:在各主流操作系统上安装与配置Apache Tomcat
指南:在各主流操作系统上安装与配置Apache Tomcat Apache Tomcat作为一款广受欢迎的开源Java Servlet容器,为用户提供了一个纯Java环境下的Web服务器和Servlet容器。本文将详细介绍如何在不同的操作系统上安装Apache Tomcat,并进行基本的配置…...
电力-DTU实战配置:从组态王到花生壳的组网与调试
1. DTU在电力行业的实战价值 DTU(数据终端设备)在电力自动化系统中扮演着神经末梢的角色。我参与过多个变电站监控项目,发现很多新手工程师容易把DTU和普通无线模块混淆。实际上,DTU是自带完整协议栈的智能终端,它能将…...
如何快速上手Citra模拟器:3步完成3DS游戏体验的终极指南
如何快速上手Citra模拟器:3步完成3DS游戏体验的终极指南 【免费下载链接】citra A Nintendo 3DS Emulator 项目地址: https://gitcode.com/GitHub_Trending/ci/citra Citra是一款开源的任天堂3DS模拟器,让你能在PC上畅玩经典的3DS游戏。无论你是想…...
如何彻底告别AutoCAD字体缺失烦恼?FontCenter终极解决方案完整指南
如何彻底告别AutoCAD字体缺失烦恼?FontCenter终极解决方案完整指南 【免费下载链接】FontCenter AutoCAD自动管理字体插件 项目地址: https://gitcode.com/gh_mirrors/fo/FontCenter 你是否曾经在打开同事发来的CAD图纸时,看到满屏的问号和乱码&a…...
如何快速优化Windows系统:Winhance中文版完整指南
如何快速优化Windows系统:Winhance中文版完整指南 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winhance-zh_CN …...
终极FanControl中文配置指南:3步实现Windows智能风扇控制
终极FanControl中文配置指南:3步实现Windows智能风扇控制 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending…...
Cubase Pro v15.0音乐创作全流程下载与安装指南
对于录音棚与影视配乐师或业余音乐创作爱好者来说,应该不会感到陌生。Cubase是一款专业级数字音频工作站,广泛用于音乐创作、录音、编曲、混音及母带处理等全流程音乐制作环节。 目前比较常用的版本为Cubase 8.0和Cubase Pro v15.0,深…...
华硕笔记本性能优化终极秘籍:G-Helper让你的电脑重获新生
华硕笔记本性能优化终极秘籍:G-Helper让你的电脑重获新生 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix,…...
元数据管理难实现?看这一篇就足够
很多企业一提到元数据管理,第一反应都是平台、架构、上云、同步、治理,听起来方向都对,但真正推进起来,往往很容易卡住。系统越来越多,数据源越来越杂,链路一拉长,数据到底从哪来、被谁加工、给…...
从ST转GD32:手把手教你搞定GD32F103的替换与开发环境搭建(Keil版)
从ST转GD32:手把手教你搞定GD32F103的替换与开发环境搭建(Keil版) 在嵌入式开发领域,越来越多的工程师开始关注国产MCU平台。作为STM32F103的"国产替代",GD32F103凭借出色的兼容性和更具竞争力的价格&#x…...
如何用Stretchly打造健康工作习惯:休息提醒工具的完整使用指南
如何用Stretchly打造健康工作习惯:休息提醒工具的完整使用指南 【免费下载链接】stretchly The break time reminder app 项目地址: https://gitcode.com/gh_mirrors/st/stretchly 在现代数字工作环境中,长时间盯着电脑屏幕已成为常态,…...
