C语言面试题30至39题

30. 用变量a给出下面定义

由于题目没有提供具体的定义,这里给出几个常见的变量定义示例:

  • 整数变量int a;
  • 字符变量char a;
  • 浮点变量float a;
  • 双精度浮点变量double a;
  • 指针变量int *a;

31. 数组和链表的区别?

数组和链表是两种常见的数据结构,它们有以下主要区别:

  • 内存布局

    • 数组:连续内存块。
    • 链表:分散内存块,节点通过指针链接。
  • 访问方式

    • 数组:随机访问,时间复杂度为O(1)。
    • 链表:顺序访问,时间复杂度为O(n)。
  • 插入/删除

    • 数组:需要移动元素,时间复杂度为O(n)。
    • 链表:不需要移动元素,时间复杂度为O(1)(前提是已找到插入/删除位置)。
  • 内存使用

    • 数组:大小固定,声明时分配。
    • 链表:动态分配,根据需要增加或减少。
  • 缓存友好性

    • 数组:缓存友好,连续存储。
    • 链表:缓存不友好,节点分散。

32. 堆栈的溢出一般是由什么原因造成的(至少说出三个)?

堆栈溢出通常由以下原因引起:

  • 递归过深:未达到基准条件或条件错误,导致无限递归。
  • 大数组或变量:在栈中分配过大数组或局部变量,超出栈空间。
  • 无限循环:导致函数调用或栈操作不断增加。

33. 不使用第三方变量交换变量a和b的值?

可以使用算术运算或位运算交换两个变量的值:

使用算术运算:

a = a + b;
b = a - b;
a = a - b;

使用位运算:

a = a ^ b;
b = a ^ b;
a = a ^ b;

34. 带参宏与带参函数的区别(至少说出5点)?

  • 编译时机

    • 宏:预处理阶段展开。
    • 函数:编译阶段处理。
  • 类型检查

    • 宏:无类型检查。
    • 函数:有严格的类型检查。
  • 调试

    • 宏:难以调试,错误信息指向宏定义处。
    • 函数:易于调试,错误信息指向函数调用处。
  • 代码大小

    • 宏:每次展开增加代码大小。
    • 函数:函数体只在内存中存储一份。
  • 作用域

    • 宏:无作用域概念。
    • 函数:有作用域,局部变量和全局变量分隔。

35. 指针和引用的区别(C和C++中的问题)?

  • 定义方式

    • 指针:int *ptr = &var;
    • 引用:int &ref = var;
  • 是否可为空

    • 指针:可以为NULL。
    • 引用:必须初始化,不可为空。
  • 重新绑定

    • 指针:可以改变指向的对象。
    • 引用:一旦绑定,无法改变指向对象。
  • 使用方式

    • 指针:需要解引用操作*ptr
    • 引用:直接使用,不需要解引用。
  • 内存地址

    • 指针:存储对象的地址。
    • 引用:与对象共享相同的内存地址。

36. 结构体和共用体的区别?

  • 内存布局

    • 结构体:每个成员都有独立的内存空间,内存总大小是所有成员大小之和。
    • 共用体:所有成员共享相同的内存空间,内存总大小是最大成员的大小。
  • 用途

    • 结构体:适用于需要同时访问多个成员的场景。
    • 共用体:适用于多个成员互斥使用的场景。
  • 访问方式

    • 结构体:可以同时访问多个成员。
    • 共用体:任一时刻只能访问一个成员,修改一个成员会影响其他成员。

37. 大端与小端的概念?写个函数判断机器是大端还是小端模式?

  • 大端(Big Endian):高位字节存储在低地址。
  • 小端(Little Endian):低位字节存储在低地址。

判断函数:

#include <stdio.h>int is_little_endian() {unsigned int x = 1;return *((unsigned char*)&x) == 1;
}int main() {if (is_little_endian()) {printf("Little Endian\n");} else {printf("Big Endian\n");}return 0;
}

38. 在1G内存的计算机中能否malloc(1.2G)?为什么?

不能。在1G内存的计算机中,试图分配1.2G的内存将失败,因为系统没有足够的物理内存和虚拟内存来满足这个请求。

39. 设置地址为0x67a9的整型变量的值为0xaa66

在C语言中,通过指针可以直接操作内存地址:

int *ptr = (int*)0x67a9;
*ptr = 0xaa66;

C语言笔试题

1. 森林中一样高的树

没有明确题意的情况下,假设是寻找数组中相等的元素,可以用哈希表或排序加双指针实现。

2. strcat、strncat、strcmp、strcpy哪些函数会导致内存溢出?如何改进?

  • strcatstrcpy容易导致内存溢出,因为它们不检查目标缓冲区大小。
  • strncatstrncmp提供了长度限制,可以避免溢出。

改进:

  • 使用strncatstrncpy代替strcatstrcpy
  • 确保目标缓冲区足够大,避免溢出。

3. 用变量a给出下面的定义

由于题目未明确定义,这里给出几个常见定义:

  • 整数变量:int a;
  • 字符变量:char a;
  • 浮点变量:float a;
  • 双精度浮点变量:double a;
  • 指针变量:int *a;

通过理解和掌握这些面试题,可以更好地准备编程面试,展示对编程原理和技术细节的深刻掌握。

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

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

相关文章

Mongo 地理位置查询:海量密集点转换成聚合信息

通俗来说&#xff1a;将地图上的海量密集点通过网格分割的方式实现聚合&#xff1b; 需求&#xff1a;用mongo实现设备地理位置聚合查询 &#xff1a;多边形&#xff0c;矩形查询; 背景&#xff1a;上万设备数据量 目的&#xff1a;分享Mongo地理位置查询&#xff0c;以及文…

zdppy_amauth 实现给角色批量绑定权限

新增接口 api.resp.post("/auth/role_auth", amauth.role.add_auths)如何测试 如何测试能不能给指定的角色批量的添加权限呢&#xff1f; 1、需要新建一个角色2、需要拿到这个角色的ID3、需要新增三个权限4、需要拿到新增的三个权限的ID5、拿着角色ID和权限ID列表…

SSL代码签名最佳实践

代码签名就是软件发布者使用全球可信的证书颁发机构CA颁发的代码签名证书对软件代码进行签名&#xff0c;由此来验证软件开发者的真实身份&#xff0c;确保软件代码的完整性和可信任性。然而&#xff0c;攻击者一直试图渗透代码签名&#xff0c;意将恶意软件嵌入可信代码中。由…

【二叉树】Leetcode 637. 二叉树的层平均值【简单】

二叉树的层平均值 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[3.00000,14.50000,11.00000] 解释&#xff1a…

前端 JS 经典:如何实现私有字段

前言&#xff1a;方法有很多&#xff0c;但是我们需要择优选择。 1. 命名规范 我们可以通过命名规范实现私有字段&#xff0c;如&#xff1a;下划线 缺点&#xff1a;没有强约束力&#xff0c;我们用了也就用了 class A {_key 1; }const a new A(); a._key; // 1 2. Sym…

深入探讨5种单例模式

文章目录 一、对比总览详细解释 二、代码1. 饿汉式2. 饱汉式3. 饱汉式-双检锁4. 静态内部类5. 枚举单例 三、性能对比 一、对比总览 以下是不同单例模式实现方式的特性对比表格。表格从线程安全性、延迟加载、实现复杂度、反序列化安全性、防反射攻击性等多个方面进行考量。 …

必应bing国内广告怎样开户投放呢?

企业都在寻找高效、精准的营销渠道以扩大品牌影响力&#xff0c;提升市场占有率&#xff0c;作为全球第二大搜索引擎&#xff0c;微软旗下的必应Bing凭借其卓越的搜索技术和庞大的用户基础&#xff0c;成为了众多企业拓展市场的首选广告平台。在中国&#xff0c;必应Bing广告以…

Day33

Day33 SQL-续 数据类型 tinyint、int、unsigned、float、double、decimal、char、varchar、BLOB、LONGBLOB、TEXT、LONGTEXT、date、time、datetime、timestamp、year # 数据类型# 整数类型 ------------------------------------------------------------- # tinyint - 1字节…

vuInhub靶场实战系列-DC-6实战

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置二、信息收集2.1 主机发现2.1.1 nmap扫描存活主机2.1.2 arp-scan扫描存活主机 2.2 端口扫描2.3 指纹识别2.3.1 尝试指纹识别2.3.…

【LC刷题】DAY01:704. 二分查找、27. 移除元素

【LC刷题】DAY01&#xff1a;704. 二分查找、27. 移除元素 文章目录 【LC刷题】DAY01&#xff1a;704. 二分查找、27. 移除元素704. 二分查找 [link](https://leetcode.cn/problems/binary-search/description/)第一思路&#xff1a;优化思路 27. 移除元素 [link](https://leet…

解决Mac无法上网/网络异常的方法,重置网络

解放方法 1、前往文件夹&#xff1a;/Library/Preferences/SystemConfiguration 2 、在弹窗中输入上边的地址 3 、把文件夹中除了下图未选中的文件全部删掉&#xff0c;删除时需要输入密码 4 、重启mac 电脑就搞定了。

python的一种集成开发工具:PyCharm开发工具

一. 简介 本文简单了解两种 python语言所使用的 集成开发环境&#xff1a; PyCharm、vscode。 python语言学习中&#xff0c;可以任意选中这两个集成开发环境的一种就可以。本文先来简单学习 PyCharm开发工具安装与使用。 二. python的一种集成开发工具&#xff1a;PyChar…

【LeetCode】40. 组合总和 II

组合总和 II 题目描述&#xff1a; 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a;解集不能包含重复的组合。 示例…

数据更新后Ant Design Table组件界面未刷新怎么解决?

在使用Ant Design的Table组件时&#xff0c;我们时常需要动态更新表格数据以满足应用需求。然而&#xff0c;有时即使数据已经更新&#xff0c;界面却没有进行相应的刷新。这种情况可能由多种因素导致&#xff0c;其中之一就是关于key属性的使用问题。本文将重点讨论key属性在解…

Nginx的https功能

一.HTTPS功能简介 Web网站的登录页面都是使用https加密传输的&#xff0c;加密数据以保障数据的安全&#xff0c;HTTPS能够加密信息&#xff0c;以免敏感信息被第三方获取&#xff0c;所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议&#xff0c;HTTPS其实…

Springboot框架开发与实用篇之热部署 2024详解

开发与实用 手动启动热部署 热部署&#xff08;Hot Deployment&#xff09;指的是在应用程序正在运行的情况下&#xff0c;对其进行更新或修改并将这些变更应用到正在运行的应用程序中的过程。通常情况下&#xff0c;传统的部署方式需要停止应用程序、部署更新&#xff0c;然…

基于51单片机的智能晾衣架设计资料

第三章:硬件单元电路 经过上述分析明确了本次设计的主要目标,为了实现晾衣自身能够完成对外界数据的采集与分析,集成控制环节我们采用了ATMEL公司生产的AT89C52单片机,与市面上的其他嵌入式控制单元相比较在体积与功耗方面都相当出色。此次设计主要突破在于设计合理的控制电…

最短路问题

最短路问题是图论里非常经典的一个考点 接下来着重讲述五种求最短路的算法&#xff1a;朴素版dijkstra算法、堆优化版的dijkstra算法、bellman-ford算法、spfa算法、floyd算法 总体思维导图&#xff1a; 总体思路&#xff1a; 最短路分为两大类 { 在以下给出的时间复杂度中n…

学习笔记——路由网络基础——静态路由(static)

三、静态路由(static) 1、静态路由 (1)定义 静态路由(Static)&#xff1a;由管理员手动配置和维护的路由。静态路由配置简单&#xff0c;被广泛应用于网络中。此外还可以实现负载均衡和路由备份。 静态路由默认优先级为60&#xff0c;如果想在多条静态路由中让某条路由优选…

网络运维:现代IT架构的守护者

网络运维&#xff1a;现代IT架构的守护者 在数字化浪潮席卷全球的今天&#xff0c;网络运维已不再是简单的技术术语&#xff0c;而是每一个追求高效、稳定运营的企业和组织必须重视的关键环节。本文将探讨网络运维的重要性&#xff0c;以及它在现代IT架构中所扮演的不可或缺的…