C++知识点面试总结

news/2024/7/10 1:31:30 标签: c++, 面试, 目标检测, 计算机视觉

1、指针和引用的区别
1.1 定义:
指针:指针是一个变量,它存储了另一个变量的内存地址。定义指针时使用符号,例如int ptr;定义了一个整数指针。
引用:引用是一个别名,它是一个已存在变量的别名。定义引用时使用&符号,例如int& ref = x;定义了一个整数引用。
1.2 内存地址:
指针:指针存储了变量的内存地址,可以指向不同的对象,可以为nullptr(空指针)。
引用:引用是已存在变量的别名,它没有自己的内存地址,它直接绑定到另一个变量。
1.3 指向:
指针:指针可以在不同的时间指向不同的对象,通过改变指针的值来实现。
引用:引用在创建时被绑定到一个对象,它不能在后续指向其他对象。
1.4 语法:
指针:通过解引用运算符来访问指针指向的对象,例如ptr。
引用:引用使用原始的变量名来访问对象,例如ref。
1.5 空引用:
指针:指针可以为nullptr,表示不指向任何对象。
引用:引用不能为空,它在创建时必须绑定到一个对象。
1.6 传递给函数:
指针:指针可以用于传递对象的地址给函数,实现函数参数的传递。
引用:引用也可用于传递对象给函数,可以实现更加直观的函数调用。
1.7 用途:
指针:通常用于动态内存分配、数组、数据结构、以及需要指向多个对象的情况。
引用:通常用于函数参数传递、操作大型数据结构以避免复制、以及实现运算符重载。
1.8 安全性:
指针:指针需要谨慎使用,因为它们可以导致空指针异常和内存泄漏等问题。
引用:引用通常更加安全,因为它们总是指向一个有效的对象,但需要注意生命周期管理。

2、声明和定义的区别
2.1 声明:
声明是指在程序中告诉编译器一个标识符的存在,但不为它分配内存或分配空间。这就像是一个承诺,告诉编译器在程序的某处会有一个具有特定名称和类型的标识符。
声明通常包括变量、函数、类或其他用户定义的类型的名称和类型信息,但不包括初始化或分配内存的过程。
示例:

extern int x; // x被声明为一个int类型的变量
void myFunction(); // myFunction被声明为一个函数
class MyClass; // MyClass被声明为一个类

2.2 定义
定义是指在程序中为标识符分配内存或空间,也可以为它们分配初始值。定义实际上创建了标识符的实体,使其可以在程序中使用。
通常,只有一个声明,而没有一个定义,但在某些情况下,一个声明也可能是一个定义(例如,在变量定义中初始化时)。
例:

int x = 10; // x被定义为一个int类型的变量并初始化为10
void myFunction() {
   
    // 函数定义
}
class MyClass {
   
    // 类定义
};

声明是指向编译器声明某个标识符的类型和名称,而定义是在程序中为这个标识符分配内存或空间,或为其分配初始值。

3、C和C++中的struct的区别(没答出来)
3.1 在C中:
1)struct可以包含数据成员,但不能包含成员函数。
2)默认情况下,struct的成员都是公有的,可以从结构体外部访问。
3)C中的struct通常用于将相关数据字段组合在一起,而不支持封装和面向对象编程的特性。
示例:

struct Point {
   
    int x;
    int y;
};

int main() {
   
    struct Point p1;
    p1.x = 10;
    p1.y = 20;
    return 0;
}

3.2 在C++中
1)在C++中,struct可以包含数据成员,也可以包含成员函数。这使得C++的struct具备类似于类的特性,包括封装、继承和多态。
2)默认情况下,C++中的struct的成员是公有的,但可以通过关键字"private"、"protected"和"public"进行访问控制。
C++中的struct用于定义类似于类的结构,可以支持面向对象编程的特性。


                

http://www.niftyadmin.cn/n/5134142.html

相关文章

opus编译全过程

1、opus-1.4 opus库下载 http://www.opus-codec.org/ 本文下载的是:opus-1.4.tar.gz 普通编译 ./configure --prefixpwd/result_gcc make && make install交叉编译: tar zxvf opus-1.4.tar.gz cd opus-1.4/ ./configure --prefixpwd/resu…

天气数据可视化平台-计算机毕业设计vue

天气变幻无常,影响着我们生活的方方面面,应用天气预报信息可以及时了解天气的趋势,给人们的工作、生活等带来便利,也可以为我们为未来的事情做安排和打算,所以一个精准的、易读 通过利用 程序对气象网站大量的气象信息…

案例分析真题-Web系统

案例分析真题-Web系统 2011 年真题 【问题1】 骚戴理解:还是要学会分析,首先要先看题目在看文字内容描述,不然看完了也不知道看了个啥,根据“其中互联网上用户对公司产品信息的访问情况需要借助两种不同的第三方 Web 分析软件进行…

leetcode-哈希表

1. 理论 从哈希表的概念、哈希碰撞、哈希表的三种实现方式进行学习 哈希表:用来快速判断一个元素是否出现集合里。也就是查值就能快速判断,O(1)复杂度; 哈希碰撞:拉链法,线性探测法等。只是一种…

Undefined reference错误处理及Linux设置动态链接库so的默认搜索路径

文章目录 1 问题的提出2 问题的分析3 问题的解决3.1 Windows的VS修改配置属性3.2 Linux系统里添加搜索路径json在/usr/llib目录中libcryto.so在/usr/lib64文件夹中 Linux设置动态链接库so的默认搜索路径方法一:修改 ld.so.conf 文件方法二:修改环境变量方…

mac版本 Adobe总是弹窗提示验证问题如何解决

来自: mac软件下载macsc站 mac电脑使用过程中总是弹出Adobe 的弹窗提示,尤其是打开Adobe的软件,更是频繁的弹出提示: Your Adobe app is not genuine. Adobe reserves the right to disable this software after a 0 grace period…

你会处理 go 中的 nil 吗

对于下面这段代码,我们知道 i 实际上的值就是 nil,所以 i nil 会生效 func main() {var i *int nilif i nil {fmt.Println("i is nil") // i is nil} }现在换一种写法,我们将 i 的类型改成 interface{},i nil 依然…

TIDB日期和时间类型

TIDB日期和时间类型 一、日期和时间 DATE、DATETIME和TIMESTAMP 1、DATE DATE 类型的格式为 YYYY-MM-DD,支持的范围是 1000-01-01 到 9999-12-31。 2、TIME 类型 TIME 类型的格式为 HH:MM:SS[.fraction],支持的范围是 -838:59:59.000000 到 838:59…