【发布时间】:2011-06-30 17:14:51
【问题描述】:
这个问题以前有人问过,但我想确认一下。假设我有以下 C++ 函数:
#include <stdio.h>
#include <stdin.h>
#define length(a) sizeof(a)/sizeof(a[0])
int main()
{
double c[] = {1.0, 2.0, 3.0};
printf("%d\n", getLength(c));
return 0;
}
int getLength(double c[]) { return length(c);}
这应该返回错误的值,因为 size of 将返回指针的大小,而不是指向的数组的大小。这个:
template<typename T, int size>
int length(T(&)[size]){return size;}
我知道它可以直接工作,但我想知道我是否可以以某种方式间接调用它,即通过辅助函数。我了解两种可能的选择是将数组的长度存储在单独的插槽中或使用向量,但我想知道的是:
给定一个函数getLength:
getLength(double arr[])
{
...
}
有没有办法在不传递更多信息的情况下计算arr 的长度?
【问题讨论】:
-
@AUpadhyay:我无法编译您的第二个示例。
-
固定的第二个编译示例:codepad.org/0fSl8FKX
-
你的第一个例子也有一个错误,在这里修复:codepad.org/6TctYm8p
-
感谢 0A0D,但我的测试代码示例是为了不编译。 getLength 函数是多余的,但我想知道如果将数组作为参数传递给另一个函数,是否有任何方法可以获取数组的大小。
-
@AUpadhyay:这不是其他回答者所推断的。