带和不带结构的指针声明



两者之间有什么区别:

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

struct name *next= NULL;

。和

name *next=NULL;`

(在数据结构之后定义,当链表仍然为空时)?

"这有什么区别..."

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

首先是

结构中名称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

另一个重要的区别。

请考虑以下代码片段

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隐藏外部代码块中的结构声明。

相关内容

  • 没有找到相关文章

最新更新