Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 获取传递给对象时数组的长度_C++_Arrays_Oop_Object_Vector - Fatal编程技术网

C++ 获取传递给对象时数组的长度

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

我正在学习指针,以及如何使用指针向对象发送数组(未指定大小)。最后,我试图学习如何使用操作符重载来增加数组,并在C++中使用“vector”。p> 我定义了一个名为vector的类,如下所示

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);