以下陈述是否相同?
char *PTR='\0';
&
char *PTR=NULL;
答案 0 :(得分:3)
偶然,是的。
'\0'
是ASCII码为0的字符;因此,它是一个值为0的整数。NULL
通常也是一个值为0的整数。它们通常具有不同的大小,但是在这种情况下,编译器会认识到,因此在两种情况下,{{1} }最终为空指针(即值为0的指针)。
如果您用双引号写过PTR
,则情况非常不同:char *PTR="\0";
将被分配为两个字符的数组,两个字符均为ASCII0。"\0"
将被初始化为指向两个零中的第一个。
答案 1 :(得分:1)
不,虽然它们会产生相同的结果,但它们不是。 '\ 0'是一个单字节字符,我们用作字符串上的空终止符。 NULL是(void *)0,它是一个指针,并且是64位值(或32位,具体取决于体系结构)。您最好使用NULL(或nullptr)作为指针值,并保留'\ 0'作为终止字符串的一种方法。话虽如此,将'\ 0'转换为指针应该没问题。否则,可能会产生警告(将64位值转换为8位值)。
<html>
<head><head>
<body>
<script></script>
</body>
</html>
答案 2 :(得分:-1)
NULL是一个宏。因此,这取决于其定义是什么。通常NULL仅为0。
这里已经是不错的answer