首页 > 解决方案 > struct的指针以及如何访问元素

问题描述

我想为结构的女巫构造函数和析构函数创建一个小例子,但我的问题是我不能“打印”Zahlen[0],我不知道为什么?

感谢您提供任何帮助。

也许我必须用指针参数打印它?

#include <iostream>
using namespace std;

struct IntList{
    int *memory;
    int size;

    // Konstruktur
    IntList(unsigned initialSize = 0) {
        memory = new int[initialSize];// Speicher reservieren (0 erlaubt)
        size = initialSize;
    }

    //Destruktor
    ~IntList() {
        delete []memory; // Speicher freigeben
    }

    // Access Elemnts
    int &operator[](unsigned index) {
        if (index>=size) {throw std::out_of_range("out of bounds");}
        return memory[index];
    }
};



int main()
{
    IntList *Numbers = new IntList(10);
    Numbers[0] = 1;
    cout << Numbers[0] << endl;
    delete Numbers;

    return 0;
}

标签: c++c++11c++14

解决方案


IntList *Numbers = new IntList(10);
Numbers[0] = 1;
cout << Numbers[0] << endl;

Numbers是指向 IntList 的指针类型。自远古以来,指针在 C 家族中就具有类似数组的语义,因此Numbers[0]不是对您在堆上分配IntList::operator[]的指针的第一个元素的调用,而仅仅是对它的第一个元素。IntList

在堆栈上创建它:

IntList Numbers(10);
Numbers[0] = 1;
cout << Numbers[0] << endl;
// automatically destroyed on exiting scope

或者至少正确地解决它:

IntList *Numbers = new IntList(10);
(*Numbers)[0] = 1;
cout << (*Numbers)[0] << endl;
delete Numbers;

推荐阅读