2024.9.24 Python与C++面试八股文

server/2024/11/14 9:09:07/

1.extern

extern关键字用于在多个文件中引用同一个全局变量的声明
在一个头文件中,如果这个变量声明了,但是在cpp文件中没找到他的定义,那么编译就会报错,但是如果加了extern,编译器就不会给头文件报错,而是给cpp文件报错,如果函数没定义的话。或者定义出错的话。

2.关于反复调用简单函数的选择

在C中,我们使用define来定义这种函数,井号define是一种,文本替换的选择,就是默认的把一种文本转换成另外一种文本,方便快捷,但是不检查数据类型,所以可能出现意想不到的问题。

#include <stdio.h>#define SQUARE(x) ((x) * (x))int main() {int num = 5;printf("Square of %d is %d\n", num, SQUARE(num));return 0;
}

在C++中,可以直接把函数定义为内联函数,也就是inline,这样在编译的时候,编译器会直接把这个代码加入到代码中,避免了函数调用的开销。

#include <iostream>inline int square(int x) {return x * x;
}int main() {int num = 5;std::cout << "Square of " << num << " is " << square(num) << std::endl;return 0;
}

3.C++是类型安全吗

在上次的文章中,我提到了四种cast,这种类型转换中,reinterpret cast就是暴力转换,这种不考虑后果的转换很恐怖,很容易出问题。

4. 当一个类 A 中没有生命任何成员变量与成员函数,这时 sizeof(A)的值是多少,请解释一下编译器为什么没有让它为零。

为1而不是0,因为编译器仍然为他分配了一个地址来区分不同的类,也就是说,别看人家穷,人家是有编制的。

5.数组和指针在 C 和 C++ 中有几个关键的区别:

存储位置:
数组:在静态存储区(全局数组)或栈上(局部数组)分配内存,其大小在编译时确定。
指针:可以动态指向任意内存地址,其内存分配方式更灵活。
修改内容的区别:
对于数组,如 char a[] = “hello”;,可以修改内容(例如 a[0] = ‘X’;),因为它在可写的内存区域。
对于指针,如 char *p = “world”;,它指向一个常量字符串,试图修改 p[0] = ‘X’; 会导致未定义行为,通常是运行时错误,因为字符串字面量通常存储在只读内存中。
使用 sizeof 的差异:
对于数组,sizeof(a) 返回整个数组的字节数。
对于指针,sizeof§ 返回指针变量本身的字节数(通常是 4 或 8 字节),而不是指向的内存块的大小。指针本身并不存储它所指向内存的大小。


http://www.ppmy.cn/server/121779.html

相关文章

中序遍历二叉树全过程图解

文章目录 中序遍历图解总结拓展&#xff1a;回归与回溯 中序遍历图解 首先看下中序遍历的代码&#xff0c;其接受一个根结点root作为参数&#xff0c;判断根节点是否为nil&#xff0c;不为nil则先递归遍历左子树。 func traversal(root *TreeNode,res *[]int) {if root nil …

【数据库】sqlite

文章目录 1. 基本概述2. 主要特点3. 应用场景4. 优缺点5. 基本使用示例6. 在编程语言中的使用连接到 SQLite 数据库&#xff08;如果文件不存在会自动创建&#xff09;创建表插入数据提交事务查询数据关闭连接 7. 总结 SQLite 是一个轻量级的关系型数据库管理系统&#xff08;R…

linux 下的静态库与动态库

目录 一、介绍 1、静态库 2、动态库 二、操作 1、静态库 2、动态库 3、使用库文件 &#xff08;1&#xff09;方法一 &#xff08;2&#xff09;方法二 &#xff08;3&#xff09;方法三 一、介绍 1、静态库 静态链接库实现链接操作的方式很简单&#xff0c;即程序文…

JAVA同城生活新引擎外卖跑腿团购到店服务多合一高效系统小程序源码

&#x1f680;同城生活新风尚&#xff01;一站式高效系统&#xff0c;让日常更便捷&#x1f6cd;️ &#x1f37d;️【开篇&#xff1a;同城生活&#xff0c;一触即发】&#x1f37d;️ 在这个快节奏的时代&#xff0c;同城生活的便利性与效率成为了我们追求的新风尚。想象一下…

5个月的编程记录

不知不觉间&#xff0c;我已经在计算机这条道路上走过了五个月。从五个月前第一次翻开《C Primer Plus》开始&#xff0c;我便对编程产生了浓厚的兴趣。这门学科与我高中所学的死板知识截然不同&#xff0c;每个问题都有千变万化的解法&#xff0c;让我感到无比新鲜。 几天后&a…

Linux 简易shell编写

shell shell是壳&#xff0c;外壳的意思&#xff0c;一般我们使用linux系统有用图形化界面的也有使用命令行界面的&#xff0c;这两个都是一种shell&#xff0c;以命令行为例&#xff1a; 如图这个就是我这里的命令行格式&#xff0c;在$符后面写的就是执行的指令&#xff0c;…

数据结构栈——中缀表达式转后缀表达式

我们平常所用的标准四则运算表达式&#xff0c;如9(3-1)*310/2叫做中缀表达式&#xff0c;后缀表达式为9 3 1 - 3 * 10 2 / &#xff0c;而后缀表达式更容易被计算机所理解计算&#xff0c;我们需要利用栈将中缀表达式转成后缀表达式。 规则&#xff1a;从左到右遍历中缀表达式…

毕设基于SSM+Vue3实现设备维修管理系统四:后台框架及基础增删改查功能实现

本章介绍后端基础框架及基础的增删改查功能实现&#xff0c;创建基础的dao、service即controller层相关的基类&#xff0c;并实现基础的增删改查相关功能。 源码下载&#xff1a;点击下载 讲解视频&#xff1a; SMMVUE3实现设备维修管理系统毕设&#xff1a;后端框架搭建及表外…