从指针c ++获取数组的大小

我正在写一个简单的函数,返回数组中的最大整数。 我遇到的问题是find数组中的元素的数量。

这是函数头:

int largest(int *list, int highest_index) 

我如何获得数组“列表”中的整数数量。

我已经尝试了以下方法:

 int i = sizeof list/sizeof(int); //returns incorrect value int i = list.size(); // does not compile 

任何帮助将不胜感激!

没有办法做到这一点。 这是使用vector代替数组的一个很好的理由。 但是,如果您必须使用数组,那么您必须将数组大小作为parameter passing给函数

 int largest(int *list, int list_size, int highest_index) 

C ++中的数组相当差,越早学习使用vector越容易find东西。

C ++基于C,并从中inheritance了许多function。 关于这个问题,它inheritance了一个叫做“数组/指针等价”的东西,它是一个允许数组衰减到一个指针的规则,尤其是在作为函数parameter passing的时候。 这并不意味着一个数组一个指针,它只是意味着它可以衰减到一个。

 void func(int* ptr); int array[5]; int* ptr = array; // valid, equivalent to 'ptr = &array[0]' func(array); // equivalent to func(&array[0]); 

这最后一部分是与您的问题最相关的。 你没有传递数组,你正在传递第0个元素的地址。

为了让你的函数知道传入数组有多大,你需要把这个信息作为一个参数。

 static const size_t ArraySize = 5; int array[ArraySize]; func(array, ArraySize); 

由于指针不包含大小信息,因此不能使用sizeof。

 void func(int* array) { std::cout << sizeof(array) << "\n"; } 

这将输出“int *”的大小 – 这是4或8个字节,取决于32位和64位。

相反,您需要接受尺寸参数

 void func(int* array, size_t arraySize); static const size_t ArraySize = 5; int array[ArraySize]; func(array, ArraySize); 

即使你尝试传递一个固定大小的数组,事实certificate这是语法糖:

 void func(int array[5]); 

http://ideone.com/gaSl6J

还记得我说数组不是一个指针,只是等价的?

 int array[5]; int* ptr = array; std::cout << "array size " << sizeof(array) << std::endl; std::cout << "ptr size " << sizeof(ptr) << str::endl; 

数组大小将是5 * sizeof(int)= 20 ptr大小将是sizeof(int *)将是4或8个字节。

sizeof返回被提供的types的大小,如果你提供一个对象,那么它会推导出types并返回它的大小

如果你想知道数组中有多less个元素,那么当你有数组而不是指针时,你可以写

 sizeof(array) / sizeof(array[0]) 

或sizeof(数组)/ sizeof(*数组)

你需要记住在一个可变的数组大小,没有可能从指针检索数组大小。

 const int SIZE = 10; int list[SIZE]; // or int* list = new int[SIZE]; // do not forget to delete[] 

指针没有关于它们引用的元素的数量的信息。 如果你正在谈论函数调用的第一个参数,那么如果list是一个数组,你确实可以使用这个语法

 sizeof( list ) / sizeof( int ) 

我想补充说有三种方法。 第一个是使用通过引用传递的数组。 第二个是使用指向第一个元素的指针和元素的个数。 第三个是使用两个指针 – 起始指针和最后一个指针作为标准algorithm通常被定义。 字符数组有一个额外的可能性来处理它们。

简单的答案是你不能。 您需要将其存储在一个variables中。 C ++的优点是它有STL,你可以使用vector。 size()方法给出了该时刻向量的大小。

 #include<iostream> #include<vector> using namespace std; int main () { vector<int> v; for(int i = 0; i < 10; i++) { v.push_back(i); } cout << v.size() << endl; for(int i = 0; i < 10; i++) { v.push_back(i); } cout << v.size() << endl; return 0; } 

输出:
10
20

没有testing。 但是,应该工作。 ;)