某日二师兄参加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; //垂悬指针,指向的对象的生命周期已结束

今天的面试到这里就结束了,祝大家周末愉快~

07-01 06:49