首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何通过指针从结构中的列表中获取元素

如何通过指针从结构中的列表中获取元素
EN

Stack Overflow用户
提问于 2018-06-04 01:49:53
回答 2查看 41关注 0票数 0

我有一个简单的int*结构,我想用指针来显示元素。我想做这样的东西。

代码语言:javascript
复制
for(int i = 0; i<x*y; i++){
        std::cout << parr->elems[i];

   }

它显示奇怪的数字,比如126514360,它应该显示0

代码语言:javascript
复制
struct MyStruct {
    size_t x;
    size_t y;
    int* elems;
};


MyStruct* createMyStruct(size_t nr, size_t nc, int e = 0){
    int how_many = nr*nc;
    int my_list[how_many];
    for(int i=0; i<how_many; i++){
        my_list[i] = e;
    }
    MyStruct obj;
    obj.x=nr;
    obj.y=nc;
    obj.elems = my_list;
    return &obj;
}

void getElemsFromMyStruct(const MyStruct* parr) {
    int x = parr->x;
    int y = parr->y;


    for(int i = 0; i<x*y; i++){
        std::cout << parr->elems[i];

    }
}

int main() {
    MyStruct* a = createMyStruct(2, 3, 1);

    //it should show elems from MyStruct.elems
    getElemsFromMyStruct(a);
    return 0;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-04 01:58:18

函数createMyStruct返回在堆栈上创建的局部变量的地址。一旦函数结束,堆栈就会展开,变量也会被销毁。

同样,通过obj.elems = my_list将同一函数中的MyStruct设置为存储本地数组的地址。当函数结束时,它也会被删除。

我建议使用C/C++在堆栈和堆上进行阅读。此外,请注意,这与Java/C#等托管语言有很大不同,在托管语言中,可以使用类似的方法。

票数 2
EN

Stack Overflow用户

发布于 2018-06-04 02:01:04

您需要在createMyStruct()函数中创建MyStruct需要使用新指针创建,这样它就不会被销毁。这样做会导致示例的输出为:100000

代码语言:javascript
复制
MyStruct* createMyStruct(size_t nr, size_t nc, int e = 0){
    int how_many = nr * nc;
    int my_list[how_many];
    for(int i=0; i<how_many; i++){
        my_list[i] = e;
    }
    MyStruct *obj = new MyStruct;
    obj->x=nr;
    obj->y=nc;
    obj->elems = my_list;
    return obj;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50669313

复制
相关文章

相似问题

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