【问题标题】:Pointer declaration with and without struct? [duplicate]有和没有结构的指针声明? [复制]
【发布时间】:2015-06-13 08:30:06
【问题描述】:

两者有什么区别:

  struct name{
    int example;
    name *next;
    };

struct name *next= NULL;

...和

name *next=NULL;`

(定义在数据结构之后,当链表还是空的时候) ?

【问题讨论】:

    标签: c++ struct linked-list


    【解决方案1】:

    “和...有什么区别”

    没有。 structclass 关键字在指针声明中是可选的。

    【讨论】:

    • @DianaPapukchieva 如果您继续阅读介绍性 C++ 教程,这将对每个人都有益。这可能是一个好的指南在解释课程时首先提到的事情之一。完全没有必要在 Stack Overflow 上问它(又一次)。
    • 声明时一般可选。
    • @Puppy 做到了。找到一个非常简单(即,谷歌第一次点击“C++ struct keyword optional”)。
    【解决方案2】:

    首先是结构中名称为next的数据成员

    struct name
    {
        int example;
        name *next;
    };
    

    和结构后声明的同名变量如示例

    struct name *next = NULL;
    

    是两个不同的实体。

    最后一个声明没有将结构的任何对象的数据成员初始化为 NULL。它声明了一个指向结构类型对象的指针。

    现在说说这两个声明的区别

    struct name *next = NULL;
    

    name *next = NULL;
    

    在第一个中使用了所谓的详细类型名称struct name。与第二个声明相比,它的优点是任何对象、枚举数或同名name 声明的函数都隐藏了结构的声明。例如

    struct name
    {
        int example;
        name *next;
    };
    
    enum { name, noname };
    

    这里的枚举器name隐藏了数据类型struct name,如果你写了例子

    name *next = NULL;
    

    那么编译器会报错。

    但如果你会使用详细的名称

    struct name *next = NULL;
    

    然后代码编译成功,因为编译器现在知道此声明中的namestruct name

    另一个重要的区别。

    考虑下面的代码sn-p

    int main()
    {
        struct name
        {
            int example;
            name *next;
        };
    
        {
            name *next = NULL;
        }
    }
    

    在这个程序中,内部代码块中的声明声明了外部代码块中声明的结构类型的指针。

    现在重写程序

    int main()
    {
        struct name
        {
            int example;
            name *next;
        };
    
        {
            struct name *next = NULL;
        }
    }
    

    在这种情况下,内部代码块中的声明引入了一个新类型 struct name 将结构声明隐藏在外部代码块中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-29
      • 1970-01-01
      • 2015-02-26
      • 2022-01-16
      相关资源
      最近更新 更多