1

我正在使用 c++ 创建 int 数组并尝试获取它的长度

int *masterArray;
int count = 0;
int a = 0;
int var = 0;
ifstream myfile("sample_10.txt");
if (myfile.is_open())
{
    while(myfile.good())
    {

            string word;

        while(getline(myfile, word))
        {
            count++;
        }

        cout << "count: " << count << endl;
        masterArray = new int [count];

        myfile.clear();
        myfile.seekg(0);
        while(getline(myfile, word, '\n'))
        {
            cout << word  << " ";
            istringstream ( word ) >> var;
            masterArray[a] = var;

            a ++;
        }
    }
}

int 数组的名称是主数组,在我在数组中添加变量后,我做..

cout << "sizeof(masterArray) : " <<sizeof(masterArray);

这给了我 8,而不是 10。

我试图打印出存储在数组中的所有变量,它给了我 10,这意味着所有变量都正确存储。

我应该通过这样做来检索长度

cout << "sizeof(masterArray) : " <<sizeof(masterArray) / sizeof(*masterArray);

??

因为这给了我 2(显然,因为它是 8 除以 4)

谢谢

4

8 回答 8

2

您的masterArray变量是指针类型。我想你在 64 位机器上,所以指针是 8 个字节。这就是为什么当您执行sizeof().

没有获取数组大小的标准方法,至少我不知道。你有一个count从用户那里获得并分配数组的。我想最好保留它并使用它。

于 2012-08-07T05:45:09.573 回答
2

我建议std::vector在你的情况下使用。请注意,在 C++ 中,将向量用于任何类似数组的对象是一种常见的做法。如果你想自己管理动态分配的数组,你应该有很强的论据。

于 2012-08-07T07:05:21.327 回答
1

sizeof(masterArray);

int*为您提供平台上的 an的大小8(或 64 位,假设为8bit char)。

查看您的代码,在我看来,您可以使用std::vector代替数组,并使用std::vector::push_back方法添加元素。如果你真的需要长度,你可以从size()方法中得到它,但是你通常对向量做的是使用它的开始和结束迭代器来迭代它的内容(分别参见方法begin()end())。

于 2012-08-07T05:43:12.407 回答
1

我猜你用的是64位电脑?sizeof 返回它给出的变量的大小,在这种情况下是一个指针,换句话说,一个在 64 位计算机中等于 8 个字节的内存地址。为了在 c 中找到数组的长度,您需要使用另一个变量,其中存储了数组的大小。

于 2012-08-07T05:46:40.423 回答
1

你已经得到了长度 - 它是count. 这是通过手动跟踪来了解动态分配数组长度的唯一方法。正如其他人指出的那样,如果您通过分配数组,您只会获得指向第一个元素的指针newsizeof(masterArray)将返回此指针的大小,它在您的平台上恰好是 8 个字节。

于 2012-08-07T05:47:11.163 回答
0

用于sizeof获取数组中元素的数量仅适用于声明为数组的变量。例如int masterArray[10];

你的数组被声明为int *- 后来动态分配 - 所以你得到了该类型的大小。

于 2012-08-07T05:43:52.820 回答
0

sizeof() 仅适用于数组。你得到 8 因为指针是 8 个字节(在 64 位系统上)。您无法确定动态分配数组的长度。这意味着您需要跟踪长度,而不是重新确定它。

顺便说一句,这看起来是一个非常好的使用向量的情况。

于 2012-08-07T05:44:27.677 回答
0

这是您重写为使用的示例std::vector

std::vector<int> masterArray;
int var = 0;

ifstream myfile("sample_10.txt");
if (myfile.is_open())
{
    while(myfile.good())
    {

            string word;

        while(getline(myfile, word))
        {
            count++;
        }

        cout << "count: " << count << endl;
        masterArray.reserve(count); // will allocate at least count ints

        myfile.clear();
        myfile.seekg(0);
        while(getline(myfile, word, '\n'))
        {
            cout << word  << " ";
            istringstream ( word ) >> var;
            masterArray.push_back(var); // store the current word
        }
    }
}
于 2012-08-07T07:34:58.617 回答