首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指向C++中结构的指针

指向C++中结构的指针
EN

Stack Overflow用户
提问于 2016-03-03 14:01:04
回答 1查看 114关注 0票数 4

为了完成作业,我必须在C++中实现一个列表,因此我定义了一个结构:

代码语言:javascript
复制
struct Node {
    int value;
    Node * next;
    Node * operator [] (int index)//to get the indexed node like in an array
    {
        Node *current = this;
        for (int i = 0; i<index; i++)
        {
            if (current==NULL) return NULL;
            current = current->next;
        }
        return current;
    }
};

当我将它与实际结构一起使用时,它工作得很好:

代码语言:javascript
复制
Node v1, v2, v3;
v1.next = &v2;
v2.next = &v3;
v3.value = 4;
v3.next = NULL;
cout<<v1[2]->value<<endl;//4
cout<<v2[1]->value<<endl;//4
cout<<v3[0]->value<<endl;//4; works just as planned
cout<<v3[1]->value<<endl;//Segmentation fault

但是当我尝试用指针的时候,事情就变得一团糟了:

代码语言:javascript
复制
Node *v4, *v5, *v6;
v4 = new Node;
v5 = new Node;
v6 = new Node;
v4->next = v5;
v4->value = 44;
v5->next = v6;
v5->value = 45;
v6->next = NULL;
v6->value = 4646;
//cout cout<<v4[0]->value<<endl; compiler says it's not a pointer
cout<<v4[0].value<<endl;//44
cout<<v4[1].value<<endl;//1851014134
cout<<v4[2].value<<endl;//45
cout<<v4[3].value<<endl;//1851014134
cout<<v4[4].value<<endl;//4646
cout<<v4[5].value<<endl;//1985297391;no segmentation fault
cout<<v6[1].value<<endl;//1985297391;no segmentation fault even though the next was NULL
delete v4;
delete v5;
delete v6;

虽然可以使用函数,但我有一些问题:

  1. 为什么指针示例中的返回值是一个结构而不是一个指针?
  2. 为什么元素现在有双倍的索引,它们之间的元素是什么?
  3. 为什么没有分割错误?

如果有人解释了这些时刻,或者给了我我可以从中学到的信息,我会非常感激

EN

回答 1

Stack Overflow用户

发布于 2016-03-03 14:15:24

通过这样做

代码语言:javascript
复制
v4 = new Node;
cout<<v4[0].value<<endl;//44
cout<<v4[1].value<<endl;//1851014134
cout<<v4[2].value<<endl;//45
cout<<v4[3].value<<endl;//1851014134
cout<<v4[4].value<<endl;//4646
cout<<v4[5].value<<endl;//1985297391;no segmentation fault

您不是在调用struct的operator[],而是在进行指针取消引用,v4[1]等于++v4; *v4;,因此此代码将导致无法预测的行为,因为您正在取消引用一些垃圾。要使它按您的需要工作,您需要将其更改为:

代码语言:javascript
复制
cout<<v4->operator[](0).value<<endl;
cout<<v4->operator[](1).value<<endl;
cout<<v4->operator[](2).value<<endl;
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35774253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档