我试图将动态数组传递给函数,添加两个值,然后在main中将它们打印出来。我当前的编译仅打印“此处”。我哪里出错了?
#include <iostream>
using namespace std;
void enqueue(int v1, int v2,char *q,int &size); //push value to back of
queue
void dequeue(); //delete value @ q[0]
int main(){
int size = 0;
char* q = new char[size];
enqueue(1,2,q,size);
cout << q[2] << endl;
for (int i=0; i<size; i++){
cout <<q[i];
}
}
void enqueue(int v1,int v2, char *q,int &size){
cout << "here" << endl;
size++;
q[size]=v1;
size++;
q[size]=v2;
}
enter code here
答案 0 :(得分:1)
首先,分配一个大小为0的数组,您需要指定一个可以使用的大小(至少3,因为您正在访问q [2]。第二,我假设您要打印一个数字,而不是一个字符,所以代替
cout << q[i];
写
cout << (int)q[i];
将其转换为整数并打印数字。
答案 1 :(得分:0)
这将打印垃圾值,因为您尚未为数组分配内存(初始大小为0)。如果您正在寻找类似于vector(在STL中)的动态数组,则需要记住该数组的容量(可以存储多少个元素)以及当前大小(数组中的元素数)。因此,每次插入之前,您都需要检查是否还有剩余空间(容量-当前大小)以及是否没有重新分配空间。显然,内存重新分配是一项非常昂贵的事务,因此在初始分配和随后的重新分配方面应该保持平衡。
要修复代码,请在排队之前为元素数分配内存。
答案 2 :(得分:0)
您还可以将函数enqueue()
更改为接收两个char
而不是int
,并将数组大小增加为2,并在添加值后递增(数组通常以0开头)。
代码在这里:
#include <iostream>
using namespace std;
void enqueue(char v1, char v2,char *q,int &size); //push value to back of
void dequeue(); //delete value @ q[0]
int main(){
int size = 2;
char* q = new char[size];
enqueue('1','2',q,size);
cout << q[2] << endl;
for (int i=0; i<size; i++){
cout <<q[i];
}
}
void enqueue(char v1,char v2, char *q,int &size){
cout << "here" << endl;
q[size]=v1;
size++;
q[size]=v2;
size++;
}
请澄清一下,这不是动态数组!它具有两个固定大小。在您的情况下,您可以研究类似std::queue
之类的东西。