簡體   English   中英

結構的指針以及如何訪問元素

[英]Struct's pointer and how to access elements

我想為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;
}
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;

這里的問題是您使Numbers成為指向IntList的指針。 IntList *Numbers = new IntList(10); 需要是IntList Numbers = IntList(10); 這樣您就擁有一個IntList對象,而不是指向該對象的指針。 這將允許您調用IntList::operator[]而不是指針的operator[] ,后者只為您提供一個Intlist

然后,您需要delete Numbers; 以及Numbers不再是指針。

你想寫

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

您的代碼段問題

IntList *Numbers;
auto thisIsNotWhatYouThinkItIs = Numbers[0];

是第二條語句返回IntList因為Numbers是指向IntList實例的指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM