就像标题所说的那样,我一直试图打印动态分配的数组元素,这些元素被分配给指针。从那里开始,我试图在添加一些元素后打印出阵列的元素,但是我得到了非常奇怪的字符,甚至不是整数。这是一些代码。
//QS.h
class QS: public QSInterface { //where the pointer is declared
private:
int* quickSort;
//QS.cpp
bool QS::createArray(int capacity) { //where the array is created
if (quickSort != NULL) {
//delete [] quickSort;
}
quickSort = new int[capacity];
arrayCap = capacity;
arraySize = 0;
return true;
}
bool QS::addToArray(int value) { //elements are added
if (arraySize >= arrayCap) {
return false;
}
quickSort = &value;
++arraySize;
return true;
}
string QS::getArray() const { //where array is "printed"
string array;
for (unsigned int i = 0; i < arraySize; ++i) {
array += *quickSort + i;
array += ", ";
}
return array;
}
我收到的输出只是无意义的ASCII字符,而不是内存地址。我想在添加到阵列时我可能搞砸了。有帮助吗?感谢
注意*我&#34;有&#34;使用数组,但也许在其他一些世界中,矢量会更好
答案 0 :(得分:1)
您不能只将int
添加到std::string
(我认为无论如何都是相关的string
)。如果查看supported operations,您会发现只能添加字符串,单个字符,C样式字符串,{'a', 'b', 'c'}
等字符列表,或者(从下一版C ++开始){{ 1}}秒。您的string_view
正在被转换为其中之一,或者您的代码甚至无法编译。我不记得是否会将int
转换为int
s或指向指针,但这两种情况都不是预期的行为。
要按照您希望的方式将char
转换为字符串,一些可能的选项是to_string
,各种C函数或string streams。
此外,int
读为*quickSort + i
,而不是(*quickSort) + i
,因此您不断将*(quicksort + i)
添加到i
的第一个元素。要访问元素quickSort
,首选方法通常是数组索引i
。
答案 1 :(得分:1)
执行此行时(添加功能):
quickSort = &value;
您基本上将指针 quickSort 设置为指向参数值的内存地址,并停止指向您在其中创建的动态数组的第一个元素开始。因此,您会错过所有其他元素,并打印随机存储器数据的整数解释。
改为写作:
quickSort[size] = value;
会将参数值的值添加到为您的数组分配的内存地址,如您所愿,而不移动指针 quickSort
最后,在最后一个函数中:
array += *quickSort + i;
可以更恰当地替换为:
array += quickSort[i];
并且,只是为了确保从 int 到 string 的转换正确完成
array += to_string(quickSort[i]);
答案 2 :(得分:0)
'QS :: addToArray'将quickSort
设置为指向堆栈上的新值(参数)。它不会向已分配的数组添加任何内容。
分配数组并将指针存储在quickSort
后,不应以任何方式更改它。您应该将项目存储在quickSort
指向的内存中,如下所示:
bool QS::addToArray(int value) { //elements are added
if (arraySize >= arrayCap) {
return false;
}
quickSort[arraySize++] = value;
return true;
}
编辑:我后来注意到QS :: getArray()中*quickSort + i
的问题,但我不会在这里添加它,因为Daniel H.首先写了这篇文章。