某日二师兄参加XXX科技公司的C++工程师开发岗位第30面:
面试官:什么是空指针?
二师兄:一般我们将等于
0/NULL/nullptr的指针称为空指针。空指针不能被解引用,但是可以对空指针取地址。
int* p = nullptr; //空指针
*p = 42; //空指针不可以解引用
int** pp = &p //空指针可以取地址
面试官:你知道
0/NULL/nullptr三者之间的区别吗?二师兄:虽然三者都能定义空指针,但三者类型不同。
二师兄:
0是int类型,NULL在g++下是一个宏定义,而nullptr是有类型的;
#define NULL ((void *)0)
typedef decltype(nullptr) nullptr_t;
sizeof(0);// 4
sizeof(NULL);//8
sizeof(nullptr);//8
二师兄:在函数重载时,会根据实参的类型选择重载函数:
#include <iostream>
void fun(int) {std::cout << "int" << std::endl;}
void fun(int*) {std::cout << "int*" << std::endl;}
void fun(nullptr_t) {std::cout << "nullpt

文章讨论了C++中的空指针概念,包括0、NULL和nullptr的差异,以及它们在函数重载中的行为。同时,解释了野指针和垂悬指针的问题及其解决方案,强调了初始化指针和避免内存泄漏的重要性。此外,提到了智能指针在防止内存泄漏中的作用,以及如何使用工具检测内存泄漏。
最低0.47元/天 解锁文章
354

被折叠的 条评论
为什么被折叠?



