华为OD技术面八股文_C++_02
文章目录
- 指针和引用的区别
- 野指针是什么?怎么导致的?怎么避免?
- 函数指针和指针函数的区别?
- 指针常量和常量指针的区别
- 值传递、指针传递和引用传递的区别
- 数组和指针有什么区别
- sizeof 一个指针长度是多少
- 智能指针都有哪些?分别简单介绍一下
- 智能指针的作用?不同智能指针使用场景
- 智能指针会存在内存泄漏吗
指针和引用的区别
- 是否可变:指针所指向的内存空间在程序运行过程中可以改变,而引用一旦绑定,不能改变。
- 是否可以为空:指针可以为空,引用必须绑定对象。
- 是否可以为多级:指针可以有多级,引用不能。
- 是否可作为容器元素:指针可以,引用不能。
- 是否支持算法运算:指针支持,引用不能。
野指针是什么?怎么导致的?怎么避免?
野指针:指向不确定、非法或者已经失效内存的指针。
产生野指针的原因:
- 指针未初始化
// 野指针 int* p; - 释放之后继续使用
int* p = new int(10); delete p; *p = 20; - 函数返回局部变量地址:局部遍历在栈上,函数结束,栈帧销毁,内存失效。
int* foo() { int x = 10; return &x; } int* p = foo(); cout << *p; - 指针越界访问: 访问非法内存,野指针行为。
int arr[5]; int* p = arr; p += 10; *p =