我在阅读和编写代码时遇到了几个问题 我已经得到了另一种方法,但这个问题仍在我的脑海中,我没有找到任何好的答案,所以让我们看看:
我可以以便携方式指定变量指针,甚至丢失 信息?看情况,我有一个可以返回的功能 如果出现错误或char,则假设NULL为全0,则为char 这将是正确的,这是正确的吗?
void * function_returning_null_or_char ();
int变量是否包含指针? (我在某处读过)..
我的NULL实现是#define NULL (void *) 0
。如果是#define NULL 0
会更好吗?所以
它可以分配给变量和指针,如char或int
*。 (见问题1)
当我将指针指定为NULL时,我将其转换为short或char 或其他类型,该值将为0?或者价值将是 为了适合该类型,切割NULL的特殊值?
我认为所有问题都恢复了: 编译器足够智能,可以在将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?
答案 0 :(得分:3)
拥有一个可以返回NULL
(指针值)或char
值的函数是没有意义的。有一个空字符 '\0'
,但它与空指针无关。有多种方法可以使函数返回char
值或某些指示没有有效值。例如,返回一个结构。
不,int
变量不应该包含指针。 int
变量包含整数值;保持指针,使用指针变量。 (你可以在整数和指针类型之间进行转换,但这样做比你想象的要少得多。)
NULL
由实现在<stddef.h>
和其他几个标准标头中为您定义。不要试图自己重新定义它。
将空指针值转换为整数类型会产生实现定义的值。如果你关心那个价值是什么,你可能做错了。
指针不是整数;不要试图将它们视为整数。空指针的表示是实现定义的;它通常是全零位零,但不能保证这一点。
查看comp.lang.c FAQ,特别是第4节(指针)和第5节(空指针)。