C语言经典面试题目(十六)

1、什么是C语言中的指针常量和指针变量?它们有什么区别?

在C语言中,指针常量和指针变量是指针的两种不同类型。它们的区别在于指针的指向和指针本身是否可以被修改。

  1. 指针常量:指针指向的内存地址不可变,但指针本身的值(即指针变量)可以变化。一旦指针被初始化为某个地址,就无法修改它指向的地址,但可以改变指针的值为其他地址。

    int *const ptr; // ptr是一个指针常量,指向int类型的数据
    int x = 10;
    ptr = &x; // 合法,初始化ptr为x的地址
    *ptr = 20; // 合法,通过ptr修改x的值为20
    
  2. 指针变量:指针指向的内存地址和指针本身的值都可以变化。可以通过指针变量来修改指针指向的地址,也可以修改指针本身的值。

    int *ptr; // ptr是一个指针变量,指向int类型的数据
    int x = 10;
    ptr = &x; // 合法,初始化ptr为x的地址
    int y = 20;
    ptr = &y; // 合法,修改ptr的值为y的地址
    

2、如何在C语言中实现字符串的查找和替换操作?

在C语言中,可以使用标准库函数来实现字符串的查找和替换操作。常用的函数包括:

  1. strstr:用于在字符串中查找子串的出现位置。
  2. strchr:用于在字符串中查找特定字符的出现位置。
  3. strrchr:用于在字符串中查找特定字符的最后一次出现位置。
  4. strtok:用于分割字符串为多个子串。
  5. 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语言中常用的文件读写模式包括:

  1. “r”:只读模式,文件必须存在,指针位于文件开头。
  2. “w”:写入模式,文件不存在时创建新文件,文件存在时清空文件内容,指针位于文件开头。
  3. “a”:追加模式,文件不存在时创建新文件,文件存在时保留原内容,在文件末尾添加新内容,指针位于文件末尾。
  4. “r+”:读写模式,文件必须存在,指针位于文件开头。
  5. “w+”:读写模式,文件不存在时创建新文件,文件存在时清空文件内容,指针位于文件开头。
  6. “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;
}

在上面的示例中,创建了几个节点表示字符和频率,然后根据哈夫曼算法构建了哈夫曼树,并打印了该哈夫曼树的结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/757326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FSP40罗德与施瓦茨FSP40频谱分析仪

181/2461/8938产品概述&#xff1a; 频率范围:9千赫至40千兆赫 分辨率带宽:1赫兹至10兆赫 显示的平均噪音水平:-155分贝&#xff08;1赫兹&#xff09; 相位噪声:10 kHz时为-113 dB&#xff08;1Hz&#xff09; 附加滤波器:100 Hz至5 MHz的通道滤波器和RRC滤波器、1 Hz至3…

数据仓库系列总结

一、数据仓库架构 1、数据仓库的概念 数据仓库&#xff08;Data Warehouse&#xff09;是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合&#xff0c;用于支持管理决策。 数据仓库通常包含多个来源的数据&#xff0c;这些数据按照主题进行组织和存储&#x…

在Qt中使用线程类QThread

说明 QThread是qt中的一个线程类。目前我了解到的共有两种用法&#xff0c;一种是作为普通的线程&#xff0c;就像c标准库中的std::thread一样&#xff0c;另一种就是作为信号槽的容器&#xff0c;负责调用qt的事件循环。 作为普通线程 重载QThread::run()这个虚函数&#x…

深度学习基础之《TensorFlow框架(7)—变量》

一、什么是变量 1、TensorFlow变量是表示程序处理的共享持久状态的最佳方法。变量通过tf.Variable OP类进行操作 这里的变量和传统认知里存储值或者返回值不一样&#xff0c;他是TensorFlow里的一个组件 2、变量的特点 &#xff08;1&#xff09;存储持久化 把程序中定义的数…

Springboot+vue的仓库管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的仓库管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层…

Leetcode 62. 不同路径

心路历程&#xff1a; 这道题基本就是Q-learning经典迷宫问题的简化版本&#xff0c;所以肯定是用动态规划了&#xff0c;毕竟RL中的时序差分估计法的本身也是来自于MC和动态规划的结合。如果正常正向思维思考的话&#xff0c;首先看不到问题明显的循环结构&#xff0c;考虑递…

秒级生图,大模型 SDXL-turbo、LCM-SDXL 实战案例来了

最近一个月&#xff0c;快速生图成为文生图领域的热点&#xff0c;其中比较典型的两种方式的代表模型分别为SDXL-turbo 和 LCM-SDXL。 SDXL-turbo 模型是 SDXL 1.0 的蒸馏版本&#xff0c;SDXL-Turbo 基于一种称之为对抗扩散蒸馏&#xff08;ADD&#xff09;的新颖的训练方法&…

Go 1.22 - 更加强大的 Go 执行跟踪

原文&#xff1a;Michael Knyszek - 2024.03.14 runtime/trace 包含了一款强大的工具&#xff0c;用于理解和排查 Go 程序。这个功能可以生成一段时间内每个 goroutine 的执行追踪。然后&#xff0c;你可以使用 go tool trace 命令&#xff08;或者优秀的开源工具 gotraceui&a…

c++11 标准模板(STL)本地化库 - std::iscntrl(std::locale) 检查字符是否被本地环境分类为控制字符

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 检查字符是否被本地环境分类为控制字符 std::iscntrl(std::locale) templa…

Spring Cloud 整合 GateWay

目录 第一章 微服务架构图 第二章 Spring Cloud整合Nacos集群 第三章 Spring Cloud GateWay 第四章 Spring Cloud Alibaba 整合Sentinel 第五章 Spring Cloud Alibaba 整合SkyWalking链路跟踪 第六章 Spring Cloud Alibaba 整合Seata分布式事务 第七章 Spring Cloud 集成Auth用…

[Qt学习笔记]Release后的exe程序在新的电脑上出现“找不到MSVCP140.dll”的错误

1、背景介绍 我们在打包程序的时候一般都会把相关依赖库整体打包&#xff0c;这样程序在新的电脑和环境下就不需要再去配置对应的环境&#xff0c;但是有时候新程序在一台新的电脑运行时会出现“找不到MSVCP140.dll”这种错误&#xff0c;其原因就是在新电脑的操作系统中缺少一…

倒计时 7 天 | 立即加入 GDE 成长计划,飞跃成为谷歌开发者专家

谷歌开发者专家 (Google Developer Experts&#xff0c;GDE)&#xff0c;又称谷歌开发者专家项目&#xff0c;是由一群经验丰富的技术专家、具有社交影响力的开发者和思想领袖组成的全球性社区。通过在各项活动演讲以及各个平台上发布优质内容来积极助力开发者、企业和技术社区…

机器学习 - 线性问题

矩阵做 transpose import torch tensor_Matrix_A torch.tensor([[1,2],[4,5],[7,8] ], dtypetorch.float32) print(tensor_Matrix_A.T)# 结果 tensor([[1., 4., 7.],[2., 5., 8.]])torch.nn.Linear() 模块也被称为 “feed-forward layer"或者"fully connected laye…

如何防御XSS攻击

上篇讲解了XSS的危害&#xff0c;name在开发网站时就要做好防御措施&#xff0c;具体措施如下&#xff1a; 可以从浏览器的执行来进行预防&#xff0c;一种是使用纯前端的方式&#xff0c;不用服务器端拼接后返回&#xff08;不适用服务器端渲染&#xff09;。另一种是对需要插…

安卓面试题多线程 91-95

91. 简述java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?有两种实现方法,分别是继承Thread类与实现Runnable接口 用synchronized关键字修饰同步方法 反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而…

AI助手 - 月之暗面 Kimi.ai

前言 这是 AI工具专栏 下的第四篇&#xff0c;这一篇所介绍的AI&#xff0c;也许是截至今天&#xff08;204-03-19&#xff09;国内可访问的实用性最强的一款。 今年年初&#xff0c;一直看到有人推荐 Kimi&#xff0c;不过面对雨后春笋般的各类品质的AI&#xff0c;说实话也有…

windows 多网卡情况dns解析超时问题的排查

最近遇到一个问题 多网卡&#xff0c;多网络环境下&#xff0c;dns解析总是超时。 排查之后发现是dns配置的问题&#xff0c;一个有线网络配置的内网dns&#xff0c;一个无线网络配置的公网dns 访问公网时莫名的时不时出现超时现象 初步排查是dns解析的耗时太长&#xff0c;…

ChatGPT-4 VS 文心一言4.0

在线体验 地址&#xff08;含 gpt 3.5 / 4.0&#xff0c;文心 3.5 / 4.0&#xff09;&#xff1a;https://chat.tool4j.com 点击访问 文心一言和ChatGPT-4都是非常强大的自然语言处理模型&#xff0c;它们都能够在对话系统和其他NLP应用中发挥巨大的作用。然而&#xff0c;它们…

【Go语言】Go语言中的函数

Go语言中的函数 Go语言中&#xff0c;函数主要有三种类型&#xff1a; 普通函数 匿名函数&#xff08;闭包&#xff09; 类方法 1 函数定义 Go语言函数的基本组成包括&#xff1a;关键字func、函数名、参数列表、返回值、函数体和返回语句。Go语言是强类型语言&#xff0…

【MySQL | 第五篇】MySQL事务总结

文章目录 5.MySQL事务5.1什么是事务&#xff1f;5.2什么是数据库事务&#xff1f;5.3数据库事务四大特性5.4并发事务带来的问题及解决方案&#xff1f;5.4.1脏读/不可重复读/幻读5.4.2不可重复读和幻读有什么区别&#xff1f;5.4.3解决并发事务带来的问题&#xff08;1&#xf…