对于数组,我目前这样做是为了获得它们的大小
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的最大大小的任何想法?
答案 0 :(得分:2)
如果您更改功能的签名,则可以:
template <std::size_t N>
void funct(int (&p)[N])
{
int size = N - 1;
}
但是,您只能将此功能模板用于数组。
答案 1 :(得分: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
确定数组中存储的字符串中的字符数。但是,此值与数组的大小不同。