C++ 获取传递给对象时数组的长度
我正在学习指针,以及如何使用指针向对象发送数组(未指定大小)。最后,我试图学习如何使用操作符重载来增加数组,并在C++中使用“vector”。p> 我定义了一个名为vector的类,如下所示C++ 获取传递给对象时数组的长度,c++,arrays,oop,object,vector,C++,Arrays,Oop,Object,Vector,我正在学习指针,以及如何使用指针向对象发送数组(未指定大小)。最后,我试图学习如何使用操作符重载来增加数组,并在C++中使用“vector”。p> 我定义了一个名为vector的类,如下所示 class vector { private: int len; int *pvec; } public: vector(int array[]) { len = sizeof(array)/sizeof(*array); cout<&l
class vector
{
private:
int len;
int *pvec;
}
public:
vector(int array[])
{
len = sizeof(array)/sizeof(*array);
cout<<len<<endl;
pvec = new int[len+1];
for(int i = 0;i<len;i++)
{
pvec[i] = *(array + i);
}
}
void display()
{
cout<<"[";
for(int i = 0;i<len;i++)
{
cout<<pvec[i];
if(i < len-1)
{
cout<<",";
}
}
cout<<endl;
}
};
当我尝试使用member函数显示向量中的元素时
v.display();
结果如下
int vec1[] = {1,2,3,4};
vector v(vec1);
2
[1,2]
但正如您所看到的,向量的长度是4,但在输出中它显示为2。如果我尝试在main中显示数组的长度
cout<<sizeof(vec1)/sizeof(*vec1)<<endl;
cout没有办法,您应该将长度作为附加函数的参数传递
将数组作为参数传递几乎就像将指针传递给它的第一个元素,这样就丢失了关于数组大小的所有信息。没有办法,应该将长度作为附加函数的参数传递
将数组作为参数传递几乎就像将指针传递给它的第一个元素一样,会丢失关于数组大小的所有信息。一旦数组作为指针传递给函数,就无法计算数组的大小
但是,您可以使用构造函数的两个重载来帮助您完成所需的工作
在第一个示例中,需要一个指向数组和大小的指针
vector(int array[], int size) : len(size)
{
cout<<len<<endl;
pvec = new int[len+1];
for(int i = 0;i<len;i++)
{
pvec[i] = *(array + i);
}
}
查看它的工作状态。一旦数组作为指针传递给函数,就无法计算数组的大小
但是,您可以使用构造函数的两个重载来帮助您完成所需的工作
在第一个示例中,需要一个指向数组和大小的指针
vector(int array[], int size) : len(size)
{
cout<<len<<endl;
pvec = new int[len+1];
for(int i = 0;i<len;i++)
{
pvec[i] = *(array + i);
}
}
查看它在。中的工作情况,您的意思是数组作为指向对象的指针传递。我读到“sizeof”不适用于指针。sizeof()返回用作参数的变量类型的大小(以字节为单位)。@Kalyan嗯,sizeof()
适用于指针,但产生指针变量的大小,而不是底层数组。是的,当我们通过int len=sizeof>使用它来知道数组的大小时(数组)/sizeof(*数组)数组的总大小为16,当4除以4时,@ KALYAN数组在传递时指针变为指针。如果要维护外围信息,请考虑使用<代码> STD::vector 或<代码> STD::数组。所以,你是说数组是作为指针传递给对象的。我读到“sieof”不适用于Poth.SI。zeof()返回用作参数的变量类型的大小(以字节为单位)。@Kalyan Well,sizeof()
可以很好地处理指针,但会产生指针变量的大小,而不是底层数组。是的,当我们使用它通过int len=sizeof(array)/sizeof(*array)知道数组的大小时数组的总大小为16,当除以4时为4。@ KALYAN数组在传递时指针变为指针。如果要维护外围信息,请考虑使用<代码> STD::矢量< /代码>或<代码> STD::数组。请在搜索之前使用搜索,这不是我的问题,我知道“sieof”。不能用于指针。我知道数组是作为指向对象的指针传递的。数组是作为指针传递的。
不太可能。它更复杂。请阅读重复数据消除线程中的答案,而不是它的标题,所有的解释都在这里。关于它,还有更多重复的问题和答案。奖励:尝试搜索“数组到指针衰减”。喜欢。请在提问之前使用搜索。这不是我的问题,我知道“sizeof”“不能用于指针。我知道数组是作为指向对象的指针传递的。数组是作为指针传递的。
不完全是这样。它更复杂。请阅读重复数据消除线程中的答案,而不是它的标题,所有的解释都在那里。关于它有更多重复的问题和答案。奖励:尝试搜索“数组到指针衰减”。尽情享受吧。
// Use the first constructor
int* array1 = new int[20];
vector v1(array1, 20);
// Use the second constructor
int array2[10] = {0};
vector v2(array2);