c++ - 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;
推荐阅读
- python - GPy - 获取 GPCoregionalizedRegression 模型的对数预测密度
- ckeditor4.x - CKeditor 4 是否从 getData() 结果中删除了 TEXTFORMAT 标签?
- certificate - 在 EJBCA 安装期间创建 EJBCA 子CA
- python - 在 Python 中腌制一个复杂的训练有素的 FeatureUnion
- c - 链式 strsep 给出分段错误 - C
- flutter - 如何在颤振中播放来自vimeo的私人视频
- java - 如何在通过 jpa crud 存储库保存时排除列?
- python - 如何消除 Python 多行字符串中的多余行?
- sql - 如果我有价格不同的相同商品并且只显示价格最低的商品,这可能吗
- ruby-on-rails - 第一次在 ruby on rails 中设置数据库