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前面。指针单独定义就不会混淆了(暴论)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Electron 使⽤ electron-builder 打包应用

electron有几种打包方式,我使用的是electron-builder。虽然下载依赖的时候让我暴躁,使用起来也很繁琐,但是它能进行很多自定义,打包完成后的体积也要小一些。 安装electron-builder: npm install electron-builder -…

教育领域的技术突破:SpringBoot系统实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

传感器模块编程实践(二)W5500 SPI转以太网模块简介及驱动源码

文章目录 一.概要二.W5500芯片介绍W5500通讯协议介绍 三.W5500模块介绍四.W5500模块原理图五.W5500以太网模通讯实验六.CubeMX工程源代码下载七.小结 一.概要 我们介绍过单片机的以太网系统一般是由:单片机MACPHYRJ45。有些单片机比如STM32F407VET6芯片内部自带MAC…

Vue基础(2)检测数据原理~生命周期

文章目录 检测数据原理1.更新时遇到的问题2.检测数据的原理-对象3. vue.set()的使用 收集表单数据过滤器内置指令1.v-text2.v-html3.v-cloak4.v-once5.v-pre 自定义指令生命周期1.挂载流程2.更新流程3.销毁流程 检测数据原理 1.Vue会监视data中的所有层次的数据 2.如何监测对象…

学习资料库系统小程序的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,观看记录管理,基础数据管理,论坛信息管理,公告信息管理,轮播图信息 微信端账号功能包括:系统首页,阅读资…

OpenAI在周四推出了一种与ChatGPT互动的新方式——一种名为“Canvas”的界面

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

界星空科技漆包线行业称重系统

万界星空科技为漆包线行业提供的称重系统是其MES制造执行系统解决方案中的一个重要组成部分。以下是对该系统的详细介绍: 一、系统概述 万界星空科技漆包线行业称重系统,是集成在MES系统中的一个功能模块,专门用于漆包线生产过程中的重量检…

Pikachu-unsafe upfileupload-getimagesize

什么是getimagesize()? getimagesize()是PHP中用于获取图像的大小和格式的函数。它可以返回一个包含图像的宽度、高度、类型和MIME类型的数组。 由于返回的这个类型可以被伪造,如果用这个函数来获取图片类型,从而判断是否时图片的话&#xff…

懒洋洋浅谈--机器学习框架

机器学习,这个词汇听起来就像是科幻小说里那些能够自我进化的机器人一样神秘而强大。但别担心,让我用一种更接地气的方式来揭开它的神秘面纱。 关于机器学习,有一个非常有意思的介绍误闯机器学习(第一关-概念和流程)-C…

【FPGA开发】Modelsim如何给信号分组

前面已经发布过了一篇关于 Modelsim 的入门使用教程,针对的基本是只有一个源文件加一个仿真tb文件的情况,而实际的工程应用中,往往是顶层加多个底层的源文件结构,如果不对信号进行一定的分组,就会显得杂乱不堪&#xf…

GAMES101(19节,相机)

相机 synthesis合成成像:比如光栅化,光线追踪,相机是capture捕捉成像, 但是在合成渲染时,有时也会模拟捕捉成像方式(包括一些技术 动态模糊 / 景深等),这时会有涉及很多专有名词&a…

阿里云ACP认证考试题库

最近有好些同学,考完阿里云ACP了,再来跟我反馈:自己花700买的阿里云ACP题库,结果答案是错的! 或者考完后发现,买的阿里云ACP题库覆盖率只有50%! 为避免大家继续踩坑,给大家分享一个阿…

洗车行软件系统有哪些 佳易王洗车店会员管理系统操作教程#洗车店会员软件试用版下载

一、前言 【试用版软件下载可点击本文章最下方官网卡片】 洗车行软件系统有哪些 佳易王洗车店会员管理系统操作教程#洗车店会员软件试用版下载 洗车管理软件应用是洗车业务的得力助手,实现会员管理及数据统计一体化,助力店铺高效、有序运营。 洗车项…

CSS | 响应式布局之媒体查询(media-query)详解

media type(媒体类型)是CSS 2中的一个非常有用的属性,通过media type我们可以对不同的设备指定特定的样式,从而实现更丰富的界面。media query(媒体查询)是对media type的一种增强,是CSS 3的重要内容之一。随着移动互联网的发展,m…

【CSS Tricks】css动画详解

目录 引言一、动画关键帧序列二、动画各属性拆解1. animation-name2. animation-duration3. animation-delay3.1 设置delay为正值3.2 设置delay为负值 4. animation-direction5. animation-iteration-count6. animation-fill-mode7. animation-play-state8. animation-timing-f…

读数据湖仓08数据架构的演化

1. 数据目录 1.1. 需要将分析基础设施放置在数据目录(Data Catalogue)的结构中 1.1.1. 元数据 1.1.2. 数据模型 1.1.3. 本体 1.1.4. 分类标准 1.2. 数据目录类似于图书馆的图书检索目录 1.2.1. 先通过图书馆的图书检索目录进行查找,以便快速找到所需的图书 1…

【AGC005D】~K Perm Counting(计数抽象成图)

容斥原理。 求出f(m) ,f(m)指代至少有m个位置不合法的方案数。 怎么求? 注意到位置为id,权值为v ,不合法的情况,当且仅当 v idk或 v id-k 因此,我们把每一个位置和权值抽象成点 ,不合法的情况之间连一…

NASA:北极植被地块 ATLAS 项目 北坡和苏厄德半岛,明尼苏达州,1998-2000 年

目录 简介 摘要 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 Arctic Vegetation Plots ATLAS Project North Slope and Seward Peninsula, AK, 1998-2000 简介 文档修订日期:2018-12-31 数据集版本:1 本数据集提供了在北极陆地-大气系统…

基于auth2的单点登录原理理解

创作背景:基于auth2实现企业门户与业务系统的单点登录跳转。 架构组成:4A统一认证中心,门户系统,业务系统,用户; 实现目标:用户登录门户系统后,可通过点击业务系统菜单&#xff0c…

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习01(环境准备)

1 准备工作 由于创建数据中心需要安装很多服务器,这些服务器要耗费很所物理物理计算资源、存储资源、网络资源和软件资源,作为穷学生只有几百块的n手笔记本,不可能买十几台服务器来搭建数据中心,也不愿意跑实验室,想躺…