当前位置: 首页 > news >正文

c基础面试题

1.static和const的作用

static意为静态的,在C语言中可以修饰变量。如果是全局变量则只能在当前文件范围访问。

如果是函数内的局部变量则延长生命周期到整个程序。这意味着如果函数被多次调用,这个变量不会被重新初始化,而是保留上次调用结束时的值。

在C++中,static 还可以用于类成员,表示该成员是类的所有对象共享的,而不是每个对象独立拥有一份。静态成员可以在类外部定义,并且可以通过类名直接访问,而不需要创建类的实例。

const 意为常量,在C语言中修饰的常量在初始化后不能被修改 。在c++中可以将成员函数声明为 const,这表明该函数不会修改对象的状态。const 也可以用于类的对象,创建一个常量对象意味着该对象的所有成员(除非特别标记为 mutable)都不能被修改。

2.typedef和define的区别

typedef#define 都可以用来创建新的类型名称或者宏定义,但是typedef 用于给现有的类型起一个新的名字,这个新名字可以用于声明变量、函数等。#define 是在预处理阶段进行文本替换,不涉及类型检查。可以通过 #undef 指令来取消一个宏定义

3.volatile作用

用于告诉编译器某个变量可能会在程序的控制流之外被改变。这意味着编译器不应该对这个变量进行优化。适用于硬件寄存器,gpio端口,多线程,信号处理等情况。

4.sizeof和strlen区别

sizeof 是一个运算符,用于获取数据类型或变量在内存中所占的字节数。strlen 是一个标准库函数,用于计算以空字符 \0 结尾的字符串的实际长度。

5.数组和链表的区别

数组是一种线性数据结构,其中所有元素都存储在一块连续的内存空间中。

每个元素可以通过索引直接访问。随机读取时间复杂度为 O(1)。

数组的大小在创建时确定,一旦创建,大小不能改变。

数组中的所有元素必须是相同类型。

链表是一种线性数据结构,其中每个元素(节点)包含数据部分和一个指向下一个节点的指针。

链表中的节点可以分散存储在内存的任意位置。元素不必是不同类型,大小随时改变。

6.对指针的理解

指针是一个变量,记录了内存中的某个位置内存地址的编号,在64位系统中占8个字节,取值运算(*)、取址运算(&)

7.结构体和共用体区别

结构体是一种可以包含多种不同类型数据的集合。每个成员都有自己的内存空间,并且这些成员的内存空间是连续的。共用体是多个不同变量成员共享一个内存地址,一个共用体只能赋一个值,赋值后只能以赋值的类型读取才能读出正确的值。大小是其中最大的变量的大小。

8.结构体字节对齐

每个变量必须从自己大小的整倍数开始,不够就补齐。

结构体的大小必须是其中最大变量的整倍数。不够就补齐。

9.堆和栈的区别

栈是一种后进先出的数据结构

  • 内存分配和释放由编译器自动管理,通常通过函数调用和返回来实现
  • 分配和释放内存的操作非常快,因为只需要调整栈指针
  • 局部变量、函数参数和函数调用的上下文信息通常存储在栈上
  • 递归调用时,每次函数调用都会在栈上分配一个新的帧

堆是一种动态分配的内存区域

  • 堆上的数据的生命周期由程序员控制
  • 动态分配的内存需要显式地释放,否则会导致内存泄漏
  • 堆上的数据可以在函数调用之间保持存在
  • 内存分配和释放由程序员手动管理,通常通过 malloccallocrealloc 和 free 等函数来实现
  • 分配和释放内存的操作相对较慢,因为需要查找合适的内存块并进行管理

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

全局变量通常存储在静态数据区,在程序启动时初始化,默认值为0,结束时销毁。可以被任何当前文件的函数访问。

局部变量存储在栈上,在函数启动时初始化,没有默认值,在函数结束时销毁。只能在当函数访问。

11.memcpy和strcpy的区别?

memcpy 用于复制内存块。它可以复制任意类型的数据,不仅仅是字符串。格式是

void *memcpy(void *dest, const void *src, size_t n);

strcpy 用于复制字符串。它只会复制到遇到第一个空字符(\0)为止。

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

段错误通常发生在程序试图访问它不应该访问的内存区域时,通常发生在访问空指针/野指针,数组下标越界,程序占用栈内存过大,多线程同时修改同个内存时。

应该给指针赋初值避免野指针的出现。检查数组和字符串的边界,避免溢出。必要的话使用动态内存分配。使用互斥锁防止线程互相干扰。

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

内存泄漏是指程序在申请内存后,未能在不再需要这些内存时及时释放,导致这部分内存无法被再次使用。随着时间的推移,内存泄漏会逐渐累积。导致系统出问题。

野指针是指向已经释放或未初始化的内存的指针。调用野指针会导致程序或其他程序数据损坏。

14.数组指针和指针数组区别

数组指针是指向数组的指针,指针数组是多个指针组成的数组

int (*p)[5]是数组指针(*p)p是int*,相当于int a[5]的指针。

int* p[5]是指针数组,有5个指针p。

不知道为啥喜欢把*写在p前面。指针单独定义就不会混淆了(暴论)

相关文章:

c基础面试题

1.static和const的作用 static意为静态的,在C语言中可以修饰变量。如果是全局变量则只能在当前文件范围访问。 如果是函数内的局部变量则延长生命周期到整个程序。这意味着如果函数被多次调用,这个变量不会被重新初始化,而是保留上次调用结…...

选择最佳HR系统_6款产品评测与推荐

本文盘点了ZohoPeople、SAPSuccessFactors等六款主流HRMS,各系统各具特色,如ZohoPeople的全球化云管理、SAP的高定制化、Workday的实时数据分析等,适合不同规模企业需求,建议企业试用后决策。 一、Zoho People Zoho People 是一个…...

Latex技巧——参考文献中加入url和doi

有的期刊要求在参考文献里加入url或者doi, 例如下图中蓝色的字体。 在bib里编辑为下图中note行,也就是利用\href命令。\href后第一个{}内为网址,第二个{}为在参考文献中显示的蓝色文字。一般来说,两个{}内的文字相同。若遇到有些网址有下划线…...

安卓WPS Office v18.13.0高级版

软件介绍 WPS Office,金山WPS移动版,使用人数最多的移动办公软件套件。独有手机阅读模式,字体清晰翻页流畅;完美支持文字,表格,演示,PDF等51种文档格式;新版本具有海量精美模版及高…...

【C++力扣】917.仅仅反转字母|387.字符串中第一个唯一字符|415.字符串相加

✨ Blog’s 主页: 白乐天_ξ( ✿>◡❛) 🌈 个人Motto:他强任他强,清风拂山冈! 🔥 所属专栏:C深入学习笔记 💫 欢迎来到我的学习笔记! 一、917.仅仅反转字母 1.1 题目描述…...

RxSwift系列(四)异常处理和调试操作

一、异常处理 1.catchErrorJustReturn 当遇到 error 事件的时候&#xff0c;就返回指定的值&#xff0c;然后结束。 enum MyError: Error {case Acase B }let disposeBag DisposeBag()let sequenceThatFails PublishSubject<String>()sequenceThatFails.catchErrorJ…...

Excel基础:电子表格Excel的使用技巧合集

一、内容 1.表格下拉框选择内容...

教育技术革新:SpringBoot在线教育系统开发

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理微服务在线教育系统的相关信息成为必然。开…...

【大数据入门 | Hive】Join语句

1. 等值join Hive支持通常的sql join语句&#xff0c;但是只支持等值连接&#xff0c;不支持非等值连接。但sql是支持非等值连接的。 1&#xff09;案例实操 &#xff08;1&#xff09;根据员工表和部门表中的部门编号相等&#xff0c;查询员工编号、员工名称和部门名称。 …...

爬虫案例——爬取情话网数据

需求&#xff1a; 1.爬取情话网站中表白里面的所有句子&#xff08;表白词_表白的话_表白句子情话大全_情话网&#xff09; 2.利用XPath来进行解析 3.使用面向对象形发请求——创建一个类 4.将爬取下来的数据保存在数据库中 写出对应解析语法 //div[class"box labelbo…...

端模一体,猎豹移动对大模型机器人发展路径清晰

今年世界机器人大会刚刚收官不久&#xff0c;接咖啡、拿苹果、摊煎饼……人形机器人在这届大会上备受关注&#xff0c;厂商们编排“整活”&#xff0c;展位几乎水泄不通。 自从AI大模型开始全面改变市场开始&#xff0c;关于机器人的方向性争论就不绝于耳&#xff0c;就在最近的…...

操作系统笔记

1、操作系统是什么 操作系统是管理硬件和软件的一种应用程序。操作系统是运行在计算机上最重要的一种软件&#xff0c;它管理计算机的资源和进程以及所有软硬件。为计算机提供一种中间层&#xff0c;使得应用软件和硬件进行分离&#xff0c;让我们无需关注硬件的实现&#xff…...

两个wordpress网站共用一个数据库的数据表

在WordPress中&#xff0c;如果你想要两个不同的网站调用同一个数据表&#xff0c;你可以通过以下几种方法实现&#xff1a; 方法一&#xff1a;使用共享数据库 1. 设置共享数据库&#xff1a; – 确保两个WordPress网站都可以访问同一个数据库。 – 在数据库服务器上创建一…...

工具方法 - 面试中回答问题的技巧

在面试中&#xff0c;回答问题的技巧尤为重要。它不仅展示了你的知识和能力&#xff0c;还体现了你处理压力和沟通的技巧。以下是一些在面试中常用的回答技巧&#xff0c;以及如何在这些场合有效地回应问题的示例&#xff1a; 1. 抓住问题的核心 面试官通常会提出直接的问题&a…...

频繁full gc问题排查及解决

为什么我们要对频繁full gc的情况进行处理---》频繁full gc会导致stw&#xff0c;影响用户体验。 &#xff08;1&#xff09;先进行问题的排查 如果频繁full gc 会报警&#xff0c;公司有自己的监控平台&#xff0c;可以查看full gc的情况 如果公司没有自己的监控平台&#…...

昇思学习打卡营第33天|基于MindSpore的恶性皮肤肿瘤识别

1. 实验介绍 本次实验的目标是基于MindSpore框架&#xff0c;训练一个ResNet50模型&#xff0c;用于恶性皮肤肿瘤的分类识别。本实验将使用包含四类皮肤肿瘤图片的数据集&#xff0c;针对ResNet50模型进行微调&#xff0c;训练出一个能够精准分类皮肤病的模型。主要过程包括数据…...

基于SpringBoot+Vue的网约车管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

Java、PHP、ASP、JSP、Kotlin、.NET、Go

Java 1995年&#xff0c;Java诞生了&#xff0c;微软的Java是J#&#xff0c;早期是J. 它在C的基础上增强了安全性&#xff0c;不允许多重继承&#xff0c;堆栈不允许类对象&#xff0c;数组和枚举都是类对象。 Java的诞生 早期的Sun公司想要在消费级嵌入式设备编写可移植的代码…...

华为-单臂路由

1、什么是单臂路由 单臂路由&#xff08;Single-Arm Routing&#xff09;是一种网络架构和配置技术&#xff0c;它允许路由器通过一个物理接口来管理多个虚拟局域网&#xff08;VLAN&#xff09;之间的通信。 这个物理接口被配置为Trunk模式&#xff0c;以便能够传输来自不同VL…...

AI应用的东风,奥特曼不想错过

文&#xff5c;魏琳华 编&#xff5c;王一粟 作为炙手可热的AI公司&#xff0c;Open AI又一次拿到了一轮足以令对手眼红的巨额融资。10月2日&#xff0c;Open AI宣布顺利完成66亿美元融资&#xff0c;补上了烧钱研发亏损的同时&#xff0c;还为下一轮竞争拿到了资金支持。 跻…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

高考志愿填报管理系统---开发介绍

高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发&#xff0c;采用现代化的Web技术&#xff0c;为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## &#x1f4cb; 系统概述 ### &#x1f3af; 系统定…...

面试高频问题

文章目录 &#x1f680; 消息队列核心技术揭秘&#xff1a;从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"&#xff1f;性能背后的秘密1.1 顺序写入与零拷贝&#xff1a;性能的双引擎1.2 分区并行&#xff1a;数据的"八车道高速公路"1.3 页缓存与批量处理…...

React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构

React 实战项目&#xff1a;微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇&#xff01;在前 29 篇文章中&#xff0c;我们从 React 的基础概念逐步深入到高级技巧&#xff0c;涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...

电脑桌面太单调,用Python写一个桌面小宠物应用。

下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡&#xff0c;可以响应鼠标点击&#xff0c;并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...

【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析

1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器&#xff08;TI&#xff09;推出的一款 汽车级同步降压转换器&#xff08;DC-DC开关稳压器&#xff09;&#xff0c;属于高性能电源管理芯片。核心特性包括&#xff1a; 输入电压范围&#xff1a;2.95V–6V&#xff0c;输…...