自我指涉结构

时间:2017-10-15 07:42:38

标签: c++

我正在编写2个自引用结构的代码:

第一

struct node
{

    int a;
    struct node *link;

};

int main()
{

    struct node n;

    n.a = 5;

    cout<< n.a << "\t" ;

    cout << n.link ;

    return 0;

}

输出:5 0x40185b`

第二

struct node{

    int a;
    struct node *link;

};

int main(){

    struct node n;

    n.a = 5;

    cout << n.a << "\t";

    cout << *n.link ;

    return 0;

}

输出:错误:未在此范围内声明链接。

请告诉我代码中到底发生了什么?

为什么抛出垃圾值?

如何初始化自引用结构指针??

1 个答案:

答案 0 :(得分:1)

我想这就是你想要做的事情:

int main(){

    struct node n;
    n.a = 5;
    n.link = NULL; // initialize the link
    cout << n.a << "\t";
    cout << n.link;

    return 0;

}
仅当*(n.link)指向有效的n.link对象时,

node才有效。 cout << *(n.link);只有在operator<<声明node时才有效(cout << n.link;有效,因为它会输出地址,而不是值)。

例如,这会更好:

#include <iostream>

struct node{
    int a;
    node *link; // Note: no need to prefix with struct
};

std::ostream& operator<<( std::ostream& str, const struct node& n )
{   
    str << n.a << "\t -> ";
    if ( n.link )
        str << *n.link;
    else
        str << "NULL";

    return str;
}

int main(){

    node n1; // Note: no need to prefix with struct
    node n2; // Note: no need to prefix with struct

    n1.a = 5;
    n1.link = &n2;

    n2.a = 6;
    n2.link = NULL;

    cout << n1;

    return 0;

}

输出5 -> 6 -> NULL