Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将NULL赋值给指针是否是错误的编程?_C_Pointers_Null - Fatal编程技术网

C 将NULL赋值给指针是否是错误的编程?

C 将NULL赋值给指针是否是错误的编程?,c,pointers,null,C,Pointers,Null,如果我用NULL初始化指针,那是错误的吗?我面临什么问题?还是仅仅是糟糕的编程 int a,b,*ptr; ptr = NULL; ptr=&a; 上述行是否有任何问题???在您提供的代码中,NULL的赋值是无用的,因为指针从未在两个赋值之间访问过(即赋值为NULL和赋值为&a)。但是,在将NULL赋值给指针时,还有其他一些情况是非常可取的: 如果有条件地将内存位置分配给指针,然后指针在最后被传递到free,则需要在初始化时将NULL分配给指针 当指针被解除分配到free,但在一段时

如果我用NULL初始化指针,那是错误的吗?我面临什么问题?还是仅仅是糟糕的编程

int a,b,*ptr;
ptr = NULL;
ptr=&a;

上述行是否有任何问题???

在您提供的代码中,
NULL
的赋值是无用的,因为指针从未在两个赋值之间访问过(即赋值为
NULL
和赋值为
&a
)。但是,在将
NULL
赋值给指针时,还有其他一些情况是非常可取的:

  • 如果有条件地将内存位置分配给指针,然后指针在最后被传递到
    free
    ,则需要在初始化时将
    NULL
    分配给指针
  • 当指针被解除分配到
    free
    ,但在一段时间内仍然可见时,应在释放指针后将其设置为
    NULL
    ,以避免挂起引用
  • 当指针失效后被访问时,需要将
    NULL
    分配给指针,以便程序尽快失败

在您提供的代码中,赋值为
NULL
是无用的,因为指针在两个赋值之间从未被访问过(即赋值为
NULL
和赋值为
&a
)。但是,在将
NULL
赋值给指针时,还有其他一些情况是非常可取的:

  • 如果有条件地将内存位置分配给指针,然后指针在最后被传递到
    free
    ,则需要在初始化时将
    NULL
    分配给指针
  • 当指针被解除分配到
    free
    ,但在一段时间内仍然可见时,应在释放指针后将其设置为
    NULL
    ,以避免挂起引用
  • 当指针失效后被访问时,需要将
    NULL
    分配给指针,以便程序尽快失败

在您提供的代码中,赋值为
NULL
是无用的,因为指针在两个赋值之间从未被访问过(即赋值为
NULL
和赋值为
&a
)。但是,在将
NULL
赋值给指针时,还有其他一些情况是非常可取的:

  • 如果有条件地将内存位置分配给指针,然后指针在最后被传递到
    free
    ,则需要在初始化时将
    NULL
    分配给指针
  • 当指针被解除分配到
    free
    ,但在一段时间内仍然可见时,应在释放指针后将其设置为
    NULL
    ,以避免挂起引用
  • 当指针失效后被访问时,需要将
    NULL
    分配给指针,以便程序尽快失败

在您提供的代码中,赋值为
NULL
是无用的,因为指针在两个赋值之间从未被访问过(即赋值为
NULL
和赋值为
&a
)。但是,在将
NULL
赋值给指针时,还有其他一些情况是非常可取的:

  • 如果有条件地将内存位置分配给指针,然后指针在最后被传递到
    free
    ,则需要在初始化时将
    NULL
    分配给指针
  • 当指针被解除分配到
    free
    ,但在一段时间内仍然可见时,应在释放指针后将其设置为
    NULL
    ,以避免挂起引用
  • 当指针失效后被访问时,需要将
    NULL
    分配给指针,以便程序尽快失败

在上面的代码中,它没有实现任何功能。上面可以/应该/可以写成
inta=0,b=0,*ptr=&a。不确定的事物通常都有可能在以后发生未定义的行为。这并不是什么神圣的规则,而是一个需要坚持的良好实践。在您的代码中,将NULL(或任何其他内容)赋值给
ptr
并不意味着什么,因为在再次赋值(地址
a
)之前,您永远不会对
ptr
进行求值,你完全错了。整行代码都是decl+初始化。在上面的代码中,它没有实现任何功能。上面的代码可以/应该/可以写成
inta=0,b=0,*ptr=&a。不确定的事物通常都有可能在以后发生未定义的行为。这并不是什么神圣的规则,而是一个需要坚持的良好实践。在您的代码中,将NULL(或任何其他内容)赋值给
ptr
并不意味着什么,因为在再次赋值(地址
a
)之前,您永远不会对
ptr
进行求值,你完全错了。整行代码都是decl+初始化。在上面的代码中,它没有实现任何功能。上面的代码可以/应该/可以写成
inta=0,b=0,*ptr=&a。不确定的事物通常都有可能在以后发生未定义的行为。这并不是什么神圣的规则,而是一个需要坚持的良好实践。在您的代码中,将NULL(或任何其他内容)赋值给
ptr
并不意味着什么,因为在再次赋值(地址
a
)之前,您永远不会对
ptr
进行求值。@MGaz如果您指的是我在之前的评论中发布的代码,那么老实说,我想不出比