某日二师兄参加XXX科技公司的C++工程师开发岗位第30面:
int* p = nullptr; //空指针
*p = 42; //空指针不可以解引用
int** pp = &p //空指针可以取地址
#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 << "nullptr_t" << std::endl;}
int main(int argc, char const *argv[])
{
fun(0); //编译通过,匹配fun(int)
fun(NULL); //编译失败,可以匹配 fun(int) fun(int*) fun(nullptr_t)
fun(nullptr); //编译成功,匹配fun(nullptr_t)
return 0;
}
int* p; //野指针,指针未初始化
*p = 42; //对野指针解引用,未定义的操作
int* p = new int(42);
delete p;
*p = 1024; //垂悬指针,指针指向的对象已被释放
int* p = nullptr;
{
int i = 42;
p = &i;
}
*p = 1024; //垂悬指针,指向的对象的生命周期已结束
今天的面试到这里就结束了,祝大家周末愉快~