面试官:满头的汗的,来面试的路一定很远吧? 还好还好,骑车不到俩小时 面试官:来先喝杯水,咱们面试不急,边喝边聊 哇,谢谢您啦,咕隆咕隆喝下半杯 ![]() ![]() 面试官:那咱们开始吧,看你项目做的还不少啊,不错不错,咱们随便聊聊。 哇,“这面试官还不错,感觉有戏” ![]() ![]() ![]() ![]() ![]() 面试官:说说空指针NULL是本质什么,与0一样吗 嗯嗯,这个,NULL不就是0吗? ![]() ![]() ![]() ![]() 面试官:你确定是吗,面带微笑,淡定的眼神...... 嗯嗯,应该是吧,,,不是吧,汗又开始冒起了来了...... ![]() ![]() ![]() ![]() 面试官:嗯嗯,了解了,不急慢慢喝水,我先上个厕所。 水的滋润与口水相互交织,骑车两小时,面试3分钟,这次我哉在这里了。 ![]() ![]() NULL在C/C++中的标准定义NULL的标准定义#if !defined(NULL) && defined(__NEEDS_NULL) 编译器预先定义了一个宏 在C/C++中的区别在C语言中,C中的“标准”写法,NULL被替换为一个 在C++中,void* 无法自由隐式转换为其它类型的指针,而字面量0可以隐式转换为指针类型。 NULL 的本质是什么我们从指针,空指针,空指针常量以及指向的内存说起 从指针角度来看我们看以下定义,p是一个函数内的局部变量,则p的值是随机的,也就是说p是一个野指针。
再看以下函数,p是一个局部变量,分配在栈上的地址,p的值是 int func() 什么是空指针(null pointer)?如果将空指针常量转换为指针类型,则保证生成的指针(称为空指针)将不相等的值与指向任何对象或函数的指针进行比较。 定义 什么是空指针常量(null pointer constant)?值为0的整数常量表达式,或强制转换为 空指针(null pointer)指向了哪里的内存这里标准没有定义,取决于系统的实现。我们常见的空指针一般指向 在我们实际写代码时,关键点在于判断哪个是空指针。 NULL 有什么作用在大部分的CPU中,内存的 当你尝试访问的时候会阻止你,但是有些地址不是只读的,如果一个指针指向了这个地址,你又在不经意间修改了它,可能会导致一些重要的文件被修改,所以指针初始化成NULL是有必要的。 注意不要混用'\0' 和 '0' 和 0 和 NULL
NULL是不是0呢NULL 就是0?我们先来看以下代码:
结果如下: ![]() 输出(null) ,在执行
NULL 不是0?如果一个指针被赋予NULL,相当于这个指针执行了 //https:///coderunner/ 编译结果如下: ![]() 由于指针node执行的是NULL,也就是逻辑地址 那么看到这里你觉得NULL还是0吗?根据宏定义我们知道: 变量在定义时,系统会给他分配内存空间,指针变量也是一样,如果指针没有指向的话,那么地址就是随机值,如果不小心用的话就会导致数据错误,从而使程序退出。 NULL 使指针p指向地址 但也有系统会使用地址 我们使用值传递的方式来看,在网上有一个面试题,这里我参考一下代码,能够帮助大家更好的理解,其代码如下:
//https:///coderunner/ |
|
来自: 西北望msm66g9f > 《培训》