面试题 整理

第1题:常见数据类型大小

这边以64位计算机系统,环境而言。

类型

存储大小

值范围

char

1 字节

-128 到 127 或 0 到 255

unsigned char

1 字节

0 到 255

signed char

1 字节

-128 到 127

int

4 字节

-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647

unsigned int

4 字节

0 到 65,535 或 0 到 4,294,967,295

short

2 字节

-32,768 到 32,767

unsigned short

2 字节

0 到 65,535

long

8字节

-2,147,483,648 到 2,147,483,647

unsigned long

8 字节

0 到 4,294,967,295

float

4字节

6位有效数字

double

8字节

15位有效数字

Long double

16字节

19位有效数字

Bool

1 bit

常用 0和1表示真假

第2题 内存泄漏和内存溢出是什么?

(1)内存溢出:指程序申请内存时,没有足够的内存供申请者使用。或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错Out Of Memory,即所谓的内存溢出。

(2)内存泄漏:是指程序在申请内存后,无法释放已申请的内存空间。一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。

第3题 指针变量大小?

在C语言中,指针变量的大小是由其所在的系统和编译器决定的,并且通常与计算机系统的地址总线宽度有关。指针变量的大小表示的是它所能存储的内存地址的位数,而不是它所指向的数据的大小。

在大多数现代32位系统上,指针变量的大小通常是4字节(32位)。而在64位系统上,指针变量的大小通常是8字节(64位)。这是因为指针需要足够的空间来存储一个完整的内存地址。

第4题 逗号运算符,和前置加加后置加加结合运算?

  1. c  
  2. #include <stdio.h>    
  3.     
  4. int main() {    
  5.     int a = 10, b = 20, c;    
  6.     c = (a++, b--, a + b);    
  7.     printf("a = %d, b = %d, c = %d\n", a, b, c);    
  8.     return 0;    
  9. }  
  10. //输出结果 a=11,b=19,c=30  

逗号运算符会从左向右,依次计算然后保留,最后一个计算结果。

但是逗号运算符优先级没有,“=”赋值优先级高,所以一定要注意()

这题如果没有(),结果将完全不一样。

第5题.h头文件中的ifndef/define/endif的作用?

答:防止该头文件被重复引用。

第6题.用变量a给出下面的定义:

 问题一:一个整型数

 答案:int a;

问题二:一个指向整型数的指针

   答案:int*a;

问题三:一个指向指针的的指针,它指向的指针是指向一 个整型数

   答案:int**a;

问题四:一个有 10个整型数的数组

   答案:int a[10];

问题五:一个有 10个指针的数组,该指针是指向-个整型数的

   答案:int *a[10];

问题六:一个指向有10个整型数数组的指针

   答案:int (*a)[10];

问题七:一个指向函数的指针,该函数有一个整型参数并返回一个整型数

  答案:int (*a)(int );

问题八:一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一 个整

型数

答案:int(*a)[10](int)

问题九:int*(*a[10])(int*)是什么?

答案:int*(*a[10])(int*) 是一个相对复杂的C语言声明。为了理解这个声明,我们可以使用C语言的“右左法则”或“螺旋法则”来逐步解析它。

首先,我们来看整个声明的最右侧部分:int*。这表示一个指向int的指针。

然后,我们向左移动,看到(int*)。这表示一个函数,它接受一个int指针作为参数。

继续向左,我们看到*a[10]。这里,a是一个数组,包含10个元素。每个元素都是一个指针,指向之前提到的那种函数。

所以,int*(*a[10])(int*) 的意思是:a是一个包含10个元素的数组,每个元素都是一个指针,指向一个函数。这个函数接受一个int指针作为参数,并返回一个int指针。

第7题 预处理器 #define 使用?

问题1:用预处理指令#define声明一个常数, 用以表明1年中有多少秒(忽略闰年问题)

#defineSECONDS_ PER_ YEAR (60 * 60 * 24 * 365)UL

解答:

#define语法的基本知识(例如:不能以分号结束,括号的使用,等等)

懂得预处理器将为你计算常数表达式的值, 因此,直接写出你是如何计算一年中有多

少秒而不是计算出实际的值,是更清晰而没有代价的。

意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L告诉编译器

这个常数是的长整型数。

如果你在你的表达式中用到 UL (表示无符号长整型), 那么你有了一个好的起点。记

住,第一印象很重要.

问题2:用宏定义写一个三目运算符求最(大)小值?

  答案:

// 宏定义求最大值  
#define MAX(a, b) ((a) > (b) ? (a) : (b))  // 宏定义求最小值  
#define MIN(a, b) ((a) < (b) ? (a) : (b))

 记住宏定义只是词的替换,不具备安全类型检查。

第8题 请用三条C语言语句,交换两个整数变量的值,不准使用中间变量?

答:

通过加减法:

  1. a=a+b;  
  2. b=a-b;  
  3. a=a-b;  

通过异或来操作:

  1. a = a ^ b;    // 将a和b的异或结果赋值给a    
  2. b = a ^ b;    // 此时a是异或后的结果,再与原来的b异或就得到了原来的a的值,赋值给b    
  3. a = a ^ b;    // 此时b已经是原来的a的值,再与现在的a异或就得到了原来的b的值,赋值给a  

第9题:结构体大小计算?

计算原则:

1. 结构体的第⼀个成员对⻬到和结构体变量起始位置偏移量为0的地址处
2. 其他成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处。
对⻬数 = 编译器默认的⼀个对⻬数 与 该成员变量⼤⼩的较⼩值。
- VS 中默认的值为 8
- Linux中 gcc 没有默认对⻬数,对⻬数就是成员⾃⾝的⼤⼩
3. 结构体总⼤⼩为最⼤对⻬数(结构体中每个成员变量都有⼀个对⻬数,所有对⻬数中最⼤的)的
整数倍。
4. 如果嵌套了结构体的情况,嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对⻬数的整数倍处,结构
体的整体⼤⼩就是所有最⼤对⻬数(含嵌套结构体中成员的对⻬数)的整数倍。
int main()
{//练习1  struct S1{char c1;int i;char c2;};printf("%d\n", sizeof(struct S1));//练习2  struct S2{char c1;char c2;int i;};printf("%d\n", sizeof(struct S2));//练习3  struct S3{double d;char c;int i;};printf("%d\n", sizeof(struct S3));//练习4-结构体嵌套问题  struct S4{char c1;struct S3 s3;double d;};printf("%d\n", sizeof(struct S4));return 0;
}

答案

S1:12字节;

S2: 8 字节;

S3:16 字节;

S4: 32字节;

由1和2可以看出来,内存小的成员放前面可以有效节省内存浪费。

 第十题 联合体/共用体大小计算?

计算原则:

1.联合的⼤⼩⾄少是最⼤成员的⼤⼩。
2.当最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候,就要对⻬到最⼤对⻬数的整数倍。
#include <stdio.h>
union Un1
{char c;int a;};
union Un2
{char c[5];int i;
};
union Un3
{short c[7];int i;
};
int main()
{//下⾯输出的结果是什么?printf("%d\n", sizeof(union Un1));printf("%d\n", sizeof(union Un2));printf("%d\n", sizeof(union Un3));return 0;
}

答案:Un1:4字节        Un2:8字节                  Un3:  16字节

第十一题:常见存储类型?

知识补充:

数据完整的定义格式:

存储类型+特征类型+数据类型+变量名

存储类型:

特征类型:

数据类型:

变量名:

auto:

作用

static:

作用:

extern:

作用:

register: 

作用:

const:只读

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

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

相关文章

Python写猜数游戏

猜数游戏大家都玩过吧 规则&#xff1a;想一个数&#xff0c;然后去猜 所需用的库 作用是用来取随机数的 import random 然后定义机会和正确答案变量 answer random.randint(1, 100) opportunity 6 接下来定义规则逻辑 while opportunity > 0:print(f"| 还…

源神,启动!马斯克开源史上最大模型Grok,参数高达3140亿,可商用!

马斯克真不愧是源神&#xff0c;自开源X的推荐算法以及特斯拉智能驾驶算法后&#xff0c;又说到做到&#xff0c;开源旗下大模型Grok&#xff01; 代码和模型权重已上线GitHub。官方信息显示&#xff0c;此次开源的Grok-1是一个3140亿参数的混合专家模型&#xff0c;远超OpenAI…

C语言之判断浮点数

目录 一 简介 二 代码实现 A.方法一 B.方法二 二 时空复杂度 A.方法一 B.方法二 一 简介 在C语言中&#xff0c;判断浮点数的算法通常涉及到比较两个浮点数是否相等或比较它们的大小。由于浮点数运算存在精度误差问题&#xff0c;直接使用 或 ! 进行比较可能会导致不准…

如何搭建一个 tts 语言合成模型

搭建一个文本到语音&#xff08;TTS&#xff09;模型是一个涉及多个步骤的过程&#xff0c;包括数据准备、模型选择、训练、评估和部署。以下是一个简化的指南&#xff0c;介绍如何搭建一个基本的TTS模型&#xff1a; 1. 数据准备 数据收集&#xff1a;获取大量的文本和相应的…

HTML选择文件的实时预览

HTML选择文件的实时预览 目录 HTML选择文件的实时预览HTML代码JS代码预览 HTML代码 <input type"file" id"adv_img_input" style"width: 1000px ;height:30px"> <img src"#"id"adv_img">JS代码 <script>…

OpenAI引领下一代AI技术,推出GPT-4 Turbo

OpenAI引领下一代AI技术&#xff1a;GPT-4 Turbo 摘要 OpenAI最近对其GPT-4和GPT-3.5语言模型进行了一系列改进&#xff0c;推出了GPT-4 Turbo&#xff0c;这是AI交互和计算语言学领域的一次重大突破。GPT-4 Turbo拥有更广泛的知识库和更大的上下文窗口&#xff0c;能够更准确…

配置OGG 如何批量修改源端及目标端序列值_满足客户变态需求学会这招你就赚了

欢迎您关注我的公众号【尚雷的驿站】 **************************************************************************** 公众号&#xff1a;尚雷的驿站 CSDN &#xff1a;https://blog.csdn.net/shlei5580 墨天轮&#xff1a;https://www.modb.pro/u/2436 PGFans&#xff1a;ht…

WanAndroid(鸿蒙版)开发的第三篇

前言 DevEco Studio版本&#xff1a;4.0.0.600 WanAndroid的API链接&#xff1a;玩Android 开放API-玩Android - wanandroid.com 其他篇文章参考&#xff1a; 1、WanAndroid(鸿蒙版)开发的第一篇 2、WanAndroid(鸿蒙版)开发的第二篇 3、WanAndroid(鸿蒙版)开发的第三篇 …

2024年3月GESP认证Scratch图形化编程四级真题及答案

GESP 图形化四级试卷 &#xff08;满分&#xff1a;100 分 考试时间&#xff1a;120 分钟&#xff09; 学校&#xff1a; 姓名&#xff1a; ​ 一、单选题&#xff08;共 10 题&#xff0c;每题 2 分&#xff0c;共 30 分&#xff09; 题号 1 2 3 4 5 6 7 8 9 10 11 1…

通信协议如何连接代码-自动窗帘系统

要将自动窗帘系统的代码与硬件通过通信协议连接起来&#xff0c;你需要确保硬件支持相应的通信接口和协议。以下是一个一般性的步骤概述&#xff0c;帮助你理解如何实现这一过程&#xff1a; (1)选择通信协议&#xff1a; 首先&#xff0c;确定你的硬件支持的通信协议。常见的通…

【开源】SpringBoot框架开发学生综合素质评价系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生功能2.2 教师功能2.3 教务处功能 三、系统展示四、核心代码4.1 查询我的学科竞赛4.2 保存单个问卷4.3 根据类型查询学生问卷4.4 填写语数外评价4.5 填写品德自评问卷分 五、免责说明 一、摘要 1.1 项目介绍 基于J…

数字化转型导师坚鹏:人工智能在金融机构数字化转型中的应用

人工智能在金融机构数字化转型中的应用 课程背景&#xff1a; 金融机构数字化转型离不开人工智能&#xff0c;在金融机构数字化转型中&#xff0c;人工智能起到至关重要的作用&#xff0c;很多机构存在以下问题&#xff1a; 不清楚人工智能产业对我们有什么影响&#xff1f;…

考研数学|概率应该怎么学?

考研概率论老师很多&#xff0c;但是我最推荐两个老师&#xff0c;李良和方浩 我认为李良概率论基础讲解相比于其他老师最大的优点就是&#xff0c;每一步都会耐心解释其中的逻辑。很少会像方浩老师那样过于跳跃或者频繁串联&#xff0c;这点对于零基础思维转换慢的人来说&…

Transformer self-attention源码及原理理解

自注意力计算公式&#xff1a; 在公式(1)中Q(query)是输入一个序列中的一个token&#xff0c;K(key)代表序列中所有token的特征。 可以得到当前token与序列中其他token的相关性。在论文原文中512&#xff0c;表示每个token用512维特征表示&#xff08;序列符号的embedding长度…

C语言中大小写字母如何转化

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

Linux TCP参数——tcp_adv_win_scale

文章目录 tcp_adv_win_scaleip-sysctl.txt解释buffering overhead内核缓存和应用缓存示例计算深入理解从2到1(tcp_adv_win_scale的值)总结 tcp_adv_win_scale adv-advise&#xff1b;win-window; 用于指示TCP中接收缓存比例的值。 static inline int tcp_win_from_space(int …

【字符串算法题】541. 反转字符串 II

题目链接 思考 把字符串以2k的步长分成count_reverse个子区间。考虑最后一个子区间的字符数量&#xff1a;1&#xff09;如果大于等于k&#xff0c;则它要和前面的子区间一样&#xff0c;要对区间内的前k个字符进行反转&#xff1b;2&#xff09;如果小于k&#xff0c;则它的…

SpringSecurity(SpringBoot2.X版本实现)

资料来源于 SpringSecurity框架教程-Spring SecurityJWT实现项目级前端分离认证授权 侵权删 目录 介绍 快速开始 认证 认证流程 登录校验流程 SpringSecurity完整流程 认证流程详解 代码实现 准备工作 mysql mybatis-plus redis 统一返回类 核心代码 密码加密存…

Mesh网格obj文件构成解析

众所周知&#xff0c;Mesh网格是三维重建的常用手法&#xff0c;通过顶点-三角面的形式来完成对三维物体的表达。其中&#xff0c;最常见的Mesh网格文件格式就是obj格式。看起来复杂的三维形状其实在数值表示上是很简单的&#xff0c;大家跟我一起来做个小实验就好&#xff1a;…

echarts散点图自定义tooltip,鼠标放上去展示多行数据

先放效果图 如图&#xff0c;就是鼠标悬停在散点上&#xff08;这里的散点我替换成了图片&#xff0c;具体做法参考这篇文章&#xff1a;echarts散点图的散点用自定义图片替代-CSDN博客&#xff09;时&#xff0c;可以展示多行数据。之前查找资料的时候&#xff0c;很多用字符串…