向指针分配'\ 0'与向其分配NULL相同吗?

时间:2019-07-18 04:55:25

标签: c pointers

以下陈述是否相同?

char *PTR='\0';

char *PTR=NULL;

3 个答案:

答案 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