我正在编写一个简单的函数,用于返回数组中最大的整数。我遇到的问题是如何找到数组中元素的数量。
这里是函数的头部:
int largest(int *list, int highest_index)
如何获取数组'list'中整数的数量。
我尝试了以下方法:
int i = sizeof list/sizeof(int); //returns incorrect value
int i = list.size(); // does not compile
非常感谢您的帮助!
我正在编写一个简单的函数,用于返回数组中最大的整数。我遇到的问题是如何找到数组中元素的数量。
这里是函数的头部:
int largest(int *list, int highest_index)
如何获取数组'list'中整数的数量。
我尝试了以下方法:
int i = sizeof list/sizeof(int); //returns incorrect value
int i = list.size(); // does not compile
非常感谢您的帮助!
void func(int* ptr);
int array[5];
int* ptr = array; // valid, equivalent to 'ptr = &array[0]'
func(array); // equivalent to func(&array[0]);
static const size_t ArraySize = 5;
int array[ArraySize];
func(array, ArraySize);
void func(int* array) {
std::cout << sizeof(array) << "\n";
}
void func(int* array, size_t arraySize);
static const size_t ArraySize = 5;
int array[ArraySize];
func(array, ArraySize);
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
指针大小将为sizeof(int *)
,其大小将为4或8个字节。
*sizeof
返回所提供类型的大小,如果提供的是对象,则推断类型并返回其大小。
如果您想知道数组中有多少个元素,当您有数组而不是指针时,您可以编写:
sizeof(array) / sizeof(array[0])
或者
sizeof(array) / sizeof(*array)
无法这样做。这是使用向量而不是数组的一个好理由(其中之一)。但是如果您必须使用数组,则必须将数组的大小作为参数传递给函数。
int largest(int *list, int list_size, int highest_index)
C ++ 中的数组相当差,越早学会使用向量,你会发现事情变得更容易。
#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
未测试。但应该可以工作。;)
sizeof( list ) / sizeof( int )
我想补充一下,有三种方法:
在变量数组大小中,无法从指针中检索数组大小。
需要注意的是,在变量数组大小中,无法从指针中获取数组大小。
const int SIZE = 10;
int list[SIZE];
// or
int* list = new int[SIZE]; // do not forget to delete[]
sizeof(list) / sizeof(*list)
将始终返回定义它的作用域内数组的大小(只要它是一个常量大小的C风格数组)。 - Elliott我的答案使用了字符数组而不是整数数组,但我希望它能有所帮助。
您可以使用计数器直到达到数组的末尾。字符数组总是以 '\0' 结尾,您可以使用它来检查是否已经到达了数组的末尾。
char array[] = "hello world";
char *arrPtr = array;
char endOfString = '\0';
int stringLength = 0;
while (arrPtr[stringLength] != endOfString) {
stringLength++;
}
stringLength++;
cout << stringLength << endl;