通过指针获取最大数量的元素

Obtaining the maximum number of elements through a pointer

本文关键字:元素 最大数 获取 指针      更新时间:2023-10-16

对于数组,我目前这样做是为了获取它们的大小

int A[] = {1,2,3,4,5};
int size =sizeof(A)/sizeof(A[0]) - 1;

现在,当我将此数组传递给例如作为 ptr 的函数时。

void funct(int *p)
{
   int size =sizeof(p)/sizeof(p[0]) - 1; //This will not work as p is a pointer
}

关于如何获得 ptr 的最大大小的任何想法?

如果您更改函数的签名,则可以:

template <std::size_t N>
void funct(int (&p)[N])
{
   int size = N - 1;
}

但是,只能将此函数模板用于数组。

首先这个表达式

sizeof(A)/sizeof(A[0]) - 1

相对于数组大小的计算无效

/必须有

sizeof(A)/sizeof(A[0])

此外,表达式的类型size_t

所以而不是

int size =sizeof(A)/sizeof(A[0]);

最好将大小定义为具有类型size_t

size_t size =sizeof(A)/sizeof(A[0]);

至于指针,它们不会保留信息,无论它们只指向一个单独的对象还是指向包括数组在内的某个序列的第一个对象。因此,通常接受指针作为参数的函数还定义第二个参数,该参数指定属于指针引用的第一个元素的序列的元素数。

所以你的函数应该声明为

void funct(int *p, size_t n);

排除项是存储字符串的字符数组。在这种情况下,您可以使用标准函数确定数组中存储的字符串中有多少个字符std::strlen但是,此值与数组的大小不同。