c/c++语言开发共享未初始化和空指针之间的区别

空指针和未初始化指针之间有什么区别吗? 其中一次采访中提到了这个问题。 你能解释一下他们有什么不同吗?

    拿一个未初始化的指针:

    int* ptr;//points to any location in memory 

    取一个空指针:

     int* ptr = NULL;//normally points to 0x0 (0) 

    如果取消引用,两者都会导致未定义的行为。 NULL通常定义为0。

    嗯,区别正是如此。 空指针初始化为null,因此定义了含义。 您可以将其检查为null,并且取消引用它(在我知道的所有平台上)会导致程序崩溃并进行有意义的诊断。 您还可以在某些特定的黑客中使用空指针。 另一方面,单位指定的指针只是随机的,应该避免。

    未初始化的指针存储未定义的值。

    空指针存储定义的值,但是由环境定义的值不是任何成员或对象的有效地址。

    好的…我用Google搜索了它,继续链接: 空指针vs未初始化的指针

    基本区别在于未启动的指针具有不确定的值,而NULL指针具有定义的NULL

    关于NULL指针,来自C11 ,章节§6.3.2.3

    值为0的整型常量表达式或类型为void *的表达式称为空指针常量。 如果将空指针常量转换为指针类型,则保证将结果指针(称为空指针 )与指向任何对象或函数的指针进行比较。

    FWIW,宏NULL定义,作为空指针常量。

    是。 未初始化和空指针存在差异。 未初始化的指针可以指向任何(未知)内存位置。 用NULL初始化的空指针; 实现定义的空指针常量。

    接受答复后

     void foo(void) { void *uninitialized_pointer; void *null_pointer = null_pointer_generator(); ... } 

    uninitialized_pointer in unititialized 。 它可能有一个有效的指针值。 它可能具有与NULL比较的NULL 。 它可能没有任何指针值。 C没有定义的方法来复制或打印其值。

      // These are undefined behavior. void *another_pointer = uninitialized_pointer; unsigned x = uninitialized_pointer*0; printf("%pn", uninitialized_pointer); 

    代码可以分配uninitialized_pointer ,计算其大小或传递其地址。

      // These are defined behavior. uninitialized_pointer = malloc(1); uninitialized_pointer = NULL; printf("%zun", sizeof uninitialized_pointer); foo(&uninitialized_pointer); 

    变量null_pointer有一个值,它与空指针常量 (见下文)相等,因此在空指针中空指针可以是唯一的位模式,或者系统中可能存在许多空指针 。 它们空指针常量和相互比较。 空指针可能是也可能不是系统中的有效地址,尽管它不会与程序中的任何对象,变量,成员和函数进行同等比较。

    尝试取消引用空指针是未定义的行为:它可能导致seg-fault – 它可能不会。


    NULL空指针常量 。 分配给指针时,该指针是空指针 。 当0指定给指针时,该指针是空指针 。 这些可能是/可能不是不同的空指针 。 他们将相互比较。

    需要了解更多c/c++开发分享未初始化和空指针之间的区别,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      void *null_pointer1 = NULL; void *null_pointer2 = 0; // The 2 pointer may/may not have the same bit pattern. printf("%pn%pn", null_pointer1, null_pointer2); // They will always compare as equal. printf("%dn", null_pointer1 == null_pointer2); // Always compare as unequal. int x; printf("%dn", null_pointer1 == &x); 

      以上就是c/c++开发分享未初始化和空指针之间的区别相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/978910.html

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐