当然,我们在写C++代码时,也可以使用NULL或0(容易产生阅读上的歧义),只不过在代码风格上可能会有些不统一,所以,一般而言,都是使用nullptr。NULL是一个宏定义,这个可以直接查看到,它也是0。 2. nullptr/NULL既然都是0,那为什么一个数字0会容易引起程序崩溃? 这是因为当它代表或者转换('#define NULL ((void*)0...
NULL是一个宏定义,在c和c++中的定义不同,c中NULL为(void*)0,而c++中NULL为整数0 所以在c++中int *p=NULL; 实际表示将指针P的值赋为0,而c++中当一个指针的值为0时,认为指针为空指针 然后理解nullptr: nullptr是一个字面值常量,类型为std::nullptr_t,空指针常数可以转换为任意类型的指针类型。 在c++中(v...
它在C语言中用于表示字符串的结束。那么它和NULL有关系嘛?没有!虽然貌似NULL和'\0'的值都是0,但它们的用途和含义是不同的。NULL用于指针的判断和初始化一个不指向任何数据的指针,而'\0'用于字符串的结尾。况且,NULL作为宏定义,指针变量内部的填充不一定为0!而‘\0'这个字符常量除了内部全部为0之外,还有一...
NULL和nullptr的区别 在使用C语言对指针进行初始化的时候,通常的做法是int*p=NULL,但是 C++11 引入了 nullptr 关键字用来表示空指针,而NULL被定义成0。 在C语言中NULL会被定义成(void*)NULL,但是C++不允许直接将 void * 隐式转换到其他类型,NULL 只好被定义为 0。
6.C++中NULL和nullptr区别 答案: NULL来自C语言,一般由宏定义实现,而 nullptr 则是C++11的新增关键字。在C语言中,NULL被定义为(void*)0,而在C++语言中,NULL则被定义为整数0。 在C++中指针必须有明确的类型定义。但是将NULL定义为0带来的另一个问题是无法与整数的0区分。 因为C++中允许有函数重载。
但是存在一个问题,C语言是有隐式类型转换的,所以 NULL(这里实际上是 (void *)0 ) 可以隐式转换到 int 或 char * 。这就让程序很为难了,程序不知道选择调用哪个函数。而在 C 语言中,并不支持函数重载,故在纯 C 语言中不会有上面这个问题。 下面我们来修改一下上面的程序,将 NULL 替换为 nullptr,修改后...
C++中的nullptr相比C语言中的NULL具有更好的类型安全性。nullptr是一个强类型的指针空值,而NULL在C中通常被定义为0或(void*)0,这可能导致隐式类型转换的问题。使用nullptr可以避免这类问题,并且使代码更加清晰和易于理解。 关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/625622 ...
从字⾯上来讲,NULL是个空指针常量,我们可能会觉得:既然是个指针,那么应该调⽤#2。但事实上调⽤的却是#1,因为C++中NULL扩展为常数0,它是int 型。根本原因就是:常数0既是整数常量,也是空指针常量。为了解决这种⼆义性,C++11标准引⼊了关键字nullptr,它作为⼀种空指针常量。#7例如:void foo(...