首页 > 其他分享 >C常见面试问题

C常见面试问题

时间:2024-08-22 14:40:35浏览次数:7  
标签:函数 int 常见 问题 面试 整型 sizeof 变量 指针

  1. ”值比较
bool flag;
if (flag) {}

int flag;
if (0 == flag) {}

float flag;
const float EPSINON = 0.000001;
if (flag >= -EPSINON && flag <= EPSINON) {}
  1. sizeof 和 strlen 区别
  • sizeof 是操作符,strlen 是库函数;
  • sizeof 参数可以是变量类型,也可以是变量, strlen 参数只能是以'\0'结尾的字符串;
  • sizeof 在编译时执行,strlen 是在运行时执行;
  • sizeof 计算的是数据类型占用的内存大小,strlen 返回的是字符串的实际长度;
  • sizeof 参数为指针时不会退化, strlen 会退化为指针。
  1. C malloc和C++ new的区别
  • malloc和free对应,new和delete;
  • malloc是库函数,new是操作符,可以进行重载;
  • malloc仅仅申请内存,new会执行对象的构造函数;
  • malloc返回void*指针,new返回对象类型指针。
  1. volatile 作用

作为指令关键字,volatile确保本条指令不会被编译器优化而省略,且要求每次从直接读取。
一个被定义为volatile的变量说明这个变量可能被意想不到的改变,编译器不应该随便假设这个变量的值,使用这个变量的时候都必须重新读区,而不是使用寄存器中的备份。
应用场景:

  • 并行设备的硬件寄存器,如:状态寄存器;
  • 中断子程序中会访问的非自动变量;
  • 多线程中共享的变量。
  1. 变量定义
  • 一个整型数:int a;
  • 一个指向整型的指针:int *a;
  • 一个指向指针的指针,它的指针指向一个整型:int **a;
  • 一个整型数组:int a[10];
  • 一个整型指针数组:int *a[10];
  • 一个指向整型数组的指针:int (*a) [10];
  • 一个指向函数的指针,该函数有一个整型参数并返回整型数:int (*a) (int);
  • 一个指针数组,该数组的指针指向一个函数,该函数有一个整型参数并返回一个整型数:int (*a[10]) (int);
  1. 引用和指针的区别
  • 指针是一个实体,引用是别名;
  • 引用使用时不需要解引用,指针需要(*);
  • 引用在定义的时候进行初始化一次,之后不可改变,指针可以改变指向;
  • 引用没有const,指针有const,const指针不可改变;
  • 引用不能为空,指针可以;
  • sizeof返回引用指向的变量大小,sizeof指针得到的是指针本身的大小;
  • 指针自增操作改变指向的位置,引用自增是对指向的变量自增。
  1. static用法
  • static 定义局部变量,变量存放在静态数据区,在编译时分配内存空间,如何没有明确初始化,默认为0,运行时该变量在函数退出后不会释放;
  • static 定义全局变量,该变量只在文件内部可见,不能被外部引用;
  • static 修饰函数,该函数只在文件内部可见。
  1. #define和typedef
  • #define宏定义是字符替换,typedef是定义一种新的类型;
  • #define是在预处理的时候进行替换,编译阶段是处理宏处理后的代码,typedef定义的新类型是编译阶段的一部分;
  1. 可重入函数和不可重入函数

可重入函数:可以被多个任务或者线程共享的函数。这些函数在任何时候可以被打断,然后再次调用,而不会丢失数据。可重入函数不依赖于全局或者静态变量,只依赖参数和局部变量,因此,它们在多任务或者多线程环境是安全的。
不可重入函数:不可以被多个任务或者线程共享的函数。这些函数可能会使用全局变量或者静态变量,或者其他共享的资源,如文件、输入输出设备等。如何一个不可重入的函数被打断,并由另外的任务或者线程再次调用,可能导致数据的混乱,产生不可预期的结果。

  1. 内存布局
    CSDN 内存布局

标签:函数,int,常见,问题,面试,整型,sizeof,变量,指针
From: https://www.cnblogs.com/zccblogs/p/18373613

相关文章

  • shiro面试题
    Shiro面试题001什么是权限?①权限管理:一般指根据系统设置的安全策略或者安全规则,用户可以访问而且只能访问自己被授权的资源,不多不少。权限管理几乎出现在任何系统里面,只要有用户和密码的系统。②权限管理分类:访问权限:管理员有增删改查权限,普通用户只有查询权限。数据权限:管理......
  • 2024前端高频面试之 Vue篇--初、中级
    Vue高频面试汇总(基础篇)文末有超多前端资料~已帮助500+名同学完成改造!1.说一下Vue的生命周期vue2:主要八大生命周期beforeCreate:实例创建之前,还不能访问data的属性created:实例创建完成,可以访问data的属性、一般在这个生命周期做数据请求beforeMount:模板编译之前,还没......
  • 如何使用排除法解决模板上的问题
    1.使用Firebug进行排查1.1简要介绍与安装方法Firebug是Firefox的一款插件,提供了一整套web开发所必需的工具。从HTML的编写,到CSS样式表的美化调优,以及…所以我们首先要安装Firefox浏览器。安装好浏览器后,选择菜单栏上的“工具”菜单,点击“附加组件”==>“获取附加组件”在输......
  • 背包问题深搜
     背包问题题目描述小明就要去春游了。妈妈给他买了很多好吃的。小明想把这些吃的都放进他的书包,但他很快发现,妈妈买的东西实在太多了,他必须放弃一些,但又希望能带尽可能多的好吃的。举算法解决一些实际问题。已知小明的书包最多可以装入总重量为s的物品,同时也知道小明妈......
  • Python之列表解决实际问题案例(字谜、文件分析)
    字谜文件分析1.《葛底斯堡演说》的长度2、有多少个不同的单词字谜字谜通过重新安排单词里的字母,来组成新的单词或词组。例如,将cinema转换成另一个英语单词iceman。在这个例子中,将设计一个程序,检查两个词是否构成字谜。如何做到这一点?做法是找出两个字谜单词所共享......
  • 关于C++函数返回值的拷贝优化问题
    在传统C++程序中,如果函数的返回值是一个对象的话,可能需要对函数中的局部对象进行拷贝。如果该对象很大的话,则程序的效率会降低。在C++11以后,出现的移动语义(MoveSemantic)及拷贝优化(CopyElision)都是解决这个问题的方法。本文试图以一个最简单的例子来说明这个问题。案例下面来看......
  • springboot maven项目多环境profile配置,打包后配置文件properties或yml中的${}或@@变
    maven一些配置如下:项目中配置了多环境<profiles><!--数据库类型--><profile><!--mysql版默认--><id>mysql</id><activation><activeByDefault>true</activ......
  • 操作系统之面试常考
    【转载】:https://www.cnblogs.com/zyf-zhaoyafei/p/4714598.html最近这段时间正在积极准备面试,复习到操作系统部分,本篇文章就介绍操作系统基础内容,参考第四版《计算机操作系统》这本文章总结了面试中常考、常用到的基本知识点,希望对准备面试的同学和想回顾操作系统知识点的程序......
  • 常见Dos命令
    快捷键任务管理器ctr+shift+esc切换窗口win+tab复制ctr+c粘贴ctr+v剪切ctr+x前进ctr+y回退ctr+z保存ctr+s打开CMD开始菜单(可使用管理员权限运行)ctr+Rcmd任意文件夹打开命令行(powershell==命令行)在文件夹上方的地址栏前加cmd......
  • 启动应用程序出现pspluginwkr.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个pspluginwkr.dll文件(挑选合适的版本文件)把......