NULL实现和指针赋值

时间:2013-12-23 16:01:50

标签: c

我在阅读和编写代码时遇到了几个问题 我已经得到了另一种方法,但这个问题仍在我的脑海中,我没有找到任何好的答案,所以让我们看看:

  1. 我可以以便携方式指定变量指针,甚至丢失 信息?看情况,我有一个可以返回的功能 如果出现错误或char,则假设NULL为全0,则为char 这将是正确的,这是正确的吗?

    void * function_returning_null_or_char ();
    
  2. int变量是否包含指针? (我在某处读过)..

  3. 我的NULL实现是#define NULL (void *) 0。如果是#define NULL 0会更好吗?所以 它可以分配给变量和指针,如char或int *。 (见问题1)

  4. 当我将指针指定为NULL时,我将其转换为short或char 或其他类型,该值将为0?或者价值将是 为了适合该类型,切割NULL的特殊值?

  5. 我认为所有问题都恢复了:   编译器足够智能,可以在将0转换为变量时转换为0的NULL指针吗?

    示例代码:

        int *p = NULL;
    
        char c = (char) p; // This works, I dont know why, and char is equal to '/0';
    
        char c = NULL; //This works because the compiler is smart to convert NULL to '/0' event stddef.h defining NULL as (void *)0;
    
        char c = (char) function_returning_null_or_char (); //if this function return NULL whats the value of c? If NULL have a special value, c will have a special value too, or it will be 0?
    

1 个答案:

答案 0 :(得分:3)

  1. 拥有一个可以返回NULL(指针值)或char值的函数是没有意义的。有一个空字符 '\0',但它与空指针无关。有多种方法可以使函数返回char值或某些指示没有有效值。例如,返回一个结构。

  2. 不,int变量不应该包含指针。 int变量包含整数值;保持指针,使用指针变量。 (你可以在整数和指针类型之间进行转换,但这样做比你想象的要少得多。)

  3. NULL由实现在<stddef.h>和其他几个标准标头中为您定义。不要试图自己重新定义它。

  4. 将空指针值转换为整数类型会产生实现定义的值。如果你关心那个价值是什么,你可能做错了。

  5. 指针不是整数;不要试图将它们视为整数。空指针的表示是实现定义的;它通常是全零位零,但不能保证这一点。

    查看comp.lang.c FAQ,特别是第4节(指针)和第5节(空指针)。