我正在使用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数组的名称是master数组,在我在数组中添加变量之后 我做..
cout << "sizeof(masterArray) : " <<sizeof(masterArray);
给了我8而不是10。
我试图打印出存储在数组中的所有变量,它给出了10,这意味着所有变量都存储正确。
我应该通过
来检索长度cout << "sizeof(masterArray) : " <<sizeof(masterArray) / sizeof(*masterArray);
...
因为这给了我2(显然,因为它将8除以4)
由于
答案 0 :(得分:2)
您的masterArray
变量属于指针类型。我想你是64位机器,所以指针是8字节。这就是为什么当你做sizeof()
时它给你8。
没有标准的方法来获取数组的大小,至少不是我所知道的。您从用户处获得count
并分配数组。我想最好保留并使用它。
答案 1 :(得分:2)
我建议您使用std::vector
。请注意,在C ++中,将向量用于任何类似数组的对象是一种常见做法。如果你想自己管理动态分配的数组,你应该有非常强大的参数。
答案 2 :(得分:1)
此
sizeof(masterArray);
为您提供int*
的大小,在您的平台上为8
(或64位,假设8
位char
。)
查看您的代码,在我看来,您可以使用std::vector代替数组,并使用std::vector::push_back方法添加元素。如果你确实需要长度,你可以从size()
方法得到它,但是你通常用向量做的是使用它的开始和结束迭代器迭代它的内容(参见方法begin()
和{分别为{1}}。
答案 3 :(得分:1)
我猜您正在使用64位计算机? sizeof返回它给出的变量的大小,在这种情况下是一个指针,换句话说,一个存储器地址,在64位计算机中等于8个字节。为了在c中找到数组的长度,你需要使用另一个存储在其中的数组大小的变量。
答案 4 :(得分:1)
你已经得到了长度 - 它是count
。这是了解动态分配数组长度的唯一方法,通过手动跟踪它。正如其他人指出的那样,如果通过new
分配数组,则只能获得指向第一个元素的指针。 sizeof(masterArray)
将返回此指针的大小,它恰好是您平台上的8个字节。
答案 5 :(得分:0)
使用sizeof
获取数组中的元素数仅适用于声明为数组的变量。例如。 int masterArray[10];
。
您的数组被声明为int *
- 后来动态分配 - 因此您可以获得该类型的大小。
答案 6 :(得分:0)
sizeof()仅适用于数组。你得到8因为指针是8字节(在64位系统上)。您无法确定动态分配的数组的长度。这意味着您需要跟踪长度,而不是重新确定它。
顺便说一下,使用矢量看起来非常好。
答案 7 :(得分: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
}
}
}