C语言面试题/笔试题/高频面试题_2

9. 全局变量和局部变量的区别

定义:全局变量是定义在函数外部的变量,局部变量是定义在 函数内部的变量

存储位置:全局变量存储在全局区,局部变量存储在栈

作用域:全局变量可以在程序任意位置使用,局部变量只能在函数内部使用

生命周期:全局变量的生命周期为整个程序,程序结束空间释放,局部变量生命周期为本函数,函数结束空间释放

初始化:全局变量未初始化初 值为0,局部变量未初始化时值为随机值

11.memcpy和strcpy的区别?

  1. 拷贝内容:
  1. memcpy:memcpy 是用于拷贝指定大小的数据块(字节),它不会自动检测字符串结束符('\0'),因此适用于拷贝任意数据,包括字符串和非字符串数据。
  2. strcpy:strcpy 是用于拷贝第一个以 '\0' 结尾的字符串,它会自动拷贝整个字符串,包括字符串结束符 '\0'。
  1. 参数:
  1. memcpy:memcpy 的函数原型为 void *memcpy(void *dest, const void *src, size_t n);,其中 dest 是目标地址,src 是源地址,n 是拷贝的字节数。
  2. strcpy:strcpy 的函数原型为 char *strcpy(char *dest, const char *src);,其中 dest 是目标字符串的地址,src 是源字符串的地址。
  1. 安全性:
  1. memcpy:memcpy 不会检查目标地址是否足够大,如果目标地址空间不够大,可能会发生缓冲区溢出的问题,导致程序崩溃或数据损坏。因此,在使用 memcpy 时需要确保目标地址有足够的空间来容纳源数据。
  2. strcpy:strcpy 会自动添加字串结束符 '\0',但如果源字符串太长,超出了目标字符串的空间也会导致缓冲区溢出问题。因此,使用 strcpy 时应留足够的空间来·容纳源字符串。
  1. 性能:
  1. memcpy:memcpy 是按字节拷贝数据,因此在拷贝大块数据时比较高效。
  2. strcpy:strcpy 需要遍历整个源字符串直到遇到字符串结束符 '\0',因此在拷贝较长字符串时性能可能较差。

12. 什么是段错误?怎么解决段错误?

当程序尝试访问它没有权限访问的内存地址时

段错误通常是由以下几种情况引起的:

  1. 访问空指针: 当程序试图访问一个空指针所指向的内存地址时,就会发生段错误。例如,未初始化的指针或者指向已释放的内存的指针。
  2. 数组越界: 当程序试图访问数组越界的元素时,就会发生段错误。例如,访问数组下标小于 0 或者大于等于数组大小的元素。
  3. 非法内存访问: 当程序试图访问未分配的内存区域,或者试图访问系 统保留的内存区域,就会发生段错误。
  4. 对只读内存的写操作:当程序试图对只读内存进行写 操作时,例如对常量字符串进行修改,就会发生段错误。

要解决段错误问题,可以通过以下几种方式:

  1. 检查空指针: 在使用指针之前,先确保指针m不是空指针。可以使用条件语句或者断言来检查指针是否为空。
  2. 数组边界检查: 在访问数组元素之前,先确保访问的下标在合法的范 围内。
  3. 动态内存管理: 在动态分配内存(例如使用 malloc、calloc、new m等函数)后,要确保在不再使用该内存时释放它(例如使用 free、 delete 等函数)。
  4. 避免对只读内存进行写操作: 对于常量字符串或者是只读内存区域,避免对其进行写操作,可以使用 const 关键字来声明指向只读内存的 指针。
  5. 使用工具检查: 可以使用一些工具,如 Valgrind,在程序运行时检查内存错误,包括段错误、内存泄漏等

13.什么是内存泄漏?什么是野指针?

内存泄漏(Memory Leak): 内存泄漏是指程序在动态分配内存后,未释放不再使用的内存,导致这部分内存永远无法被回收,从而造成内存的浪费。如果程序中存在内存泄漏,随着程序的执行,内存占用会逐渐增加,最终可能导致程序崩溃或系统资源耗尽。内存泄漏的常见原因包括:

  1. 忘记释放通过 malloc、calloc、new 等动态分配的内存。
  2. 在循环或迭代过程中,每次分配内存却未及时释放导致累积。
  3. 保存了指向动态分配内存的指针,但在后续程序中指针又指向其他位置从而丢失了释放的机会。

野指针(Wild Pointer): 野指针是指指向未知或者无效内存地址的指针。野指针通常产生于以下几种情况:

  1. 内存释放后未置空:指针指向的内存已经被释放,指针没有置为 nullptr 或 NULL。
  2. 指针越界访问:‌指针指向的内存已经被释放,但程序继续使用该指针指针未初始化:指针没有初始化,即没有赋予合法的地址,指针的初始值是随机的。

编程题:

1.define比较两个数的大小

#define MIN(a, b) ((a) < (b)?(a) : (b))

2.将字符串逆序输出

void reverseString(char *str) {		int length = strlen(str);char *start = str;char *end = str + length - 1;while (start < end) {char temp = *start;*start = *end;*end = temp;start++;end--;}
}int main() {char str[] = "Hello, World!";printf("原始字符串:%s\n", str);reverseString(str);printf("逆序输出:%s\n", str);return 0;
}

3.冒泡排序

void bubbleSort(int arr[], int n) {int i, j;for (i = 0; i < n-1; i++) {// 每次循环将最大的元素冒泡到末尾,因此每轮循环只需比较前 n-i-1 个元素for (j = 0; j < n-i-1; j++) {if (arr[j] > arr[j+1]) {// 如果前一个元素大于后一个元素,则交换它们的位置int temp = arr[j];     //arr[j] ^= arr[j + 1];arr[j] = arr[j+1];     //arr[j + 1] ^= arr[j];arr[j+1] = temp;       //arr[j] ^= arr[j + 1];}}}
}

4.strlen、strcpy、strcat、strcmp

size_t my_strlen(const char *str) { size_t len = 0;while (*str) {len++;str++;}return len;
}char *my_strcpy(char *dest, const char *src) {char *temp = dest;	// 暂存dest字符串的首地址while (*src) {*dest = *src;                      dest++;src++;}*dest = '\0'; // 在目标字符串末尾加上 null 终止符return temp;
}char *my_strcat(char *dest, const char *src) {char *temp = dest;                                                                                                                        // 移动 dest 指针到目标字符串的末尾while (*dest) {dest++;}// 将源字符串复制到目标字符串的末尾while (*src) {*dest = *src;dest++;                                                                 src++;}// 添加目标字符串的 null 终止符*dest = '\0';return temp;
}#include <stdio.h>int my_strcmp(const char *str1, const char *str2) {while (*str1 && *str2) {if (*str1 != *str2) {return *str1 - *str2;}str1++;str2++;} // 如果两个字符串长度不等,返回长度差值return *str1 - *str2;
}int main() {const char *str1 = "apple";const char *str2 = "banana";int result = my_strcmp(str1, str2);if (result < 0) {printf("%s 小于 %s\n", str1, str2);} else if (result == 0) {printf("%s 等于 %s\n", str1, str2);} else {printf("%s 大于 %s\n", str1, str2);}return 0;
}

5.打印杨辉三角前10行

#include <stdio.h>
int main(int argc, char const *argv[])
{int a[10][10] = {0}, i, j;for (i = 0; i < 10; i++){a[i][0] = 1;for (j = 1; j <= i; j++)a[i][j] = a[i - 1][j] + a[i - 1][j - 1];}for (i = 0; i < 10; i++){for (j = 0; j <= i; j++)printf("%-5d", a[i][j]);putchar('\n');}return 0;
}运行上述代码,将会输出杨辉三角的前10行:Copy code
1 
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 
1 6 15 20 15 6 1 
1 7 21 35 35 21 7 1 
1 8 28 56 70 56 28 8 1 
1 9 36 84 126 126 84 36 9 1
每一行的数字都代表一个组合数,它是由 C(n, k) 组成,其中 n 为行数减1,k 为列数减1。在这个例子中,C(n, k) = triangle[n][k]。

6.atoi函数自定义

7.定义一个函数计算一个字节里(byte)里面有多少bit被置1/

int count(int x+)

{

int num=0;

for (int i = 0; i < 8; i++)//一个字节是8位

{

if((x&(1<<i))!=0)

num++;

}

return num;

}

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

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

相关文章

Brain.js(八):RNNTimeStep 实战教程 - 股票价格预测 - 实操需警慎

前置声明&#xff0c;个人浅度炒股&#xff0c;但计划将基金转入股市。然后 股市有风险&#xff0c;不是技术可以完全预测的&#xff0c;但是在无头绪的时候&#xff0c;用技术指标做个参考也不错。 本文涉及到的股票预测&#xff0c;只是代码简单示例&#xff0c;实操需警慎&a…

MySQL | 尚硅谷 | 第13章_约束

MySQL笔记&#xff1a;第13章_约束 文章目录 MySQL笔记&#xff1a;第13章_约束第13章_约束 1. 约束(constraint)概述1.1 为什么需要约束1.2 什么是约束1.3 约束的分类演示代码 2. 非空约束2.1 作用2.2 关键字2.3 特点2.4 添加非空约束2.5 删除非空约束演示代码 3. 唯一性约束3…

《计算机网络》(408大题)

2009 路由转发和静态路由的计算 子网划分、路由聚合的计算 注&#xff1a;CIDR中的子网号可以全为0或1&#xff0c;但是其主机号不允许。 注&#xff1a; 这里其实是把到互联网的路由当做了一个默认路由&#xff08;当一个目的网络地址与路由表中其他都不匹配时&#xff0c;…

NanoLog起步笔记-6-StaticLogInfo

nonolog起步笔记-6-StaticLogInfo StaticLogInfo文件名和行号文件名和行号的传入log参数 RuntimeLogger::registerInvocationSitelogid为什么只能被赋一次值 reserveAlloc加入消息头finishAlloc返回 StaticLogInfo 写C语言编译前端时&#xff0c;给我印象深刻的一部分是&#…

软件工程 概述

软件 不仅仅是一个程序代码。程序是一个可执行的代码&#xff0c;它提供了一些计算的目的。 软件被认为是集合可执行的程序代码&#xff0c;相关库和文档的软件。当满足一个特定的要求&#xff0c;就被称为软件产品。 工程 是所有有关开发的产品&#xff0c;使用良好定义的&…

Sui 集成 Phantom,生态迎来全新里程碑

作为领先的非托管多链加密&#x1f45b;&#xff0c;Phantom 宣布将支持 Sui 区块链。Sui 将加入 Solana、Bitcoin 和 Ethereum 队伍&#xff0c;成为该 wallet 支持的少数 L1 区块链之一。 此次集成也大幅提升了 Phantom 的互操作性&#xff0c;同时表明 wallet 提供商和应用…

目标跟踪领域经典论文解析

亲爱的小伙伴们&#x1f618;&#xff0c;在求知的漫漫旅途中&#xff0c;若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界&#xff0c;亦或是读研论文的撰写攻略有所探寻&#x1f9d0;&#xff0c;那不妨给我一个小小的关注吧&#x1f970;。我会精心筹备&#xff0c;在…

如何解决 java.nio.charset.CoderMalfunctionError: 编码器故障错误问题?亲测有效的解决方法!

java.nio.charset.CoderMalfunctionError 是一个在 Java 中相对较少遇到的异常&#xff0c;通常与字符编码转换过程中的错误有关。当 Java 程序在进行字符编码转换时&#xff0c;遇到无法处理的字符或编码故障时&#xff0c;就会抛出该异常。 1. 问题描述 java.nio.charset.C…

低级爬虫实现-记录HCIP云架构考试

因工作需要考HCIP云架构&#xff08;HCIP-Cloud Service Solution Architect&#xff09;证书, 特意在淘宝上买了题库&#xff0c; 考过了。 事后得知自己被坑了&#xff0c; 多花了几十大洋。 所以想着在授权期内将题库“爬”下来&#xff0c; 共享给大家。 因为整个过程蛮有…

QGroundControl之5-AppSettings.cc

介绍 应用程序设置 Application Settings &#xff0c;这里看下语言选择功能&#xff0c;它是怎么和json文件关联起来的&#xff0c;刚刚看的时候&#xff0c;很是奇怪这么多的json文件作用。 1.AppSettings.cc 文件怎么和App.SettingsGroup.json关联 在AppSettings.cc文件没…

jenkins邮件的配置详解

Jenkins邮件的配置涉及多个步骤和细节,以下是详细的配置指南: 一、前期准备 确定邮件服务:明确Jenkins将要使用的邮件服务,如QQ邮箱、163邮箱、公司邮箱(基于Microsoft 365或Exchange Server)等。获取SMTP配置信息:根据邮件服务类型,获取相应的SMTP服务器地址、端口号…

【ArcGIS微课1000例】0134:ArcGIS Earth实现二维建筑物的三维完美显示

文章目录 一、加载数据二、三维显示三、三维符号化一、加载数据 加载配套实验数据(0134.rar中的建筑物,2d或3d都可以),方法如下:点击添加按钮。 点击【Add Files】,在弹出的Open对话框中,选择建筑物,点击确定,完成添加。 默认二维显示: 二、三维显示 右键建筑物图层…

jupyterlab 增加多个kernel,正确做法

1、背景 需要增加一个kernel然后相当于隔离一个环境 juypterlab Version 3.0.14 2、用conda 安装 例如&#xff0c;你在conda下有一个python 3.12 的环境 py312 ipython kernel install --user --namepy312 如果保持的话&#xff0c;用pip安装相应的包就好 3、检查是否配置好 …

案例-商品列表(组件封装)

标签组件封装 1.双击显示&#xff0c;自动聚焦 2.失去焦点&#xff0c;隐藏输入框 标签一列&#xff0c;不同行的标签内容不同&#xff0c;但是除此之外其他基本一致&#xff0c;所以选择用 标签组件 将这一部分封装为一个组件&#xff0c;需要时组件标签展示。 首先标签处一进…

Python 基础学习(一)

一.基础语法 注释 Python中单行注释以 # 开头&#xff0c;如下&#xff1a; #!/usr/bin/python3# 第一个注释 print ("Hello, Python!") # 第二个注释多行注释可以用多个 # 号&#xff0c;还有 ‘’’ 和 “”"&#xff1a; #!/usr/bin/python3# 第一个注释…

TIM输入捕获---STM

一、简介 IC输入捕获 输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变时&#xff0c;当前CNT的值将被锁存在CCR中&#xff0c;可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数 每个高级定时器和通用定时器都拥有4个输入捕获通道 可配置为PWMI模…

【Android Studio】学习——网络连接

实验&#xff1a;Android网络连接 文章目录 实验&#xff1a;Android网络连接[toc]实验目标和实验内容&#xff1a;1、掌握Android联网的基本概念&#xff1b;2、能够使用URL connection实现网络连接&#xff1b;3、掌握第三方库的基本概念4、需实现的具体功能 实验结果功能说明…

ROS学习笔记二:ROS环境搭建

安装ubuntu安装ROS 参考赵虚左老师教程&#xff1a;ROS安装ROS 快速上手体验 -使用命令来实现 –创建工作空间&#xff1a; mkdir -p ros_learn_ws/src// ros_learn_ws为自定义空间 cd ros_learn_ws catkin_make –创建ROS功能包并添加依赖 cd src catkin_create_pkg demo_01 r…

5G中什么是ATG网络?

有人问Air to Ground Networks for NR是怎么回事&#xff1f;这个是R18 NR才引入的。 ATG很多部分和NTN类似中的内容类似。比较明显不同的是&#xff0c;NTN的RF内容有TS 38.101-5单独去讲&#xff0c;而ATG则会和地面网络共用某些band&#xff0c;ATG可以工作在N1/N3/N34/N39…

基础算法--双指针

两数之和 点击&#xff1a;题目链接 解法一&#xff1a;暴力解法 时间复杂度&#xff1a;O(N^2) 算法思路&#xff1a;两层for循环即可列出所有两个数字的组合&#xff0c;判断是否等于目标值 算法流程&#xff1a; 两层 for 循环&#xff1a; 外层 for 循环依次枚举第⼀个…