从指针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]);
还记得我说数组不是一个指针,只是等价的?
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。 但是,应该工作。 ;)