我声明了以下数组:
我将这个数组传递给一个函数。如何在函数中找到这个数组的长度?
char* array [2] = { "One", "Two"};
我将这个数组传递给一个函数。如何在函数中找到这个数组的长度?
vector
(推荐)。1 以防您想知道,大多数人都对 C 字符串的工作方式感到遗憾。
template <typename T, size_t N>
void YourFunction( T (&array)[N] )
{
size_t myarraysize = N;
}
int main(argc,char**argv)
。 - Joe McGrathvoid foo(int array[]) {
/* ... */
}
void bar(int *array) {
/* ... */
}
这两者是相同的:
6.3.2.1.3: 除非它是sizeof运算符或一元&运算符的操作数,或者是用于初始化数组的字符串文字,否则具有类型“type的数组”的表达式将被转换为具有类型“指向类型”的表达式,该表达式指向数组对象的初始元素而不是一个lvalue。如果数组对象具有寄存器存储类,则行为未定义。
因此,在foo()
或bar()
内部,您不知道是否使用数组、数组的一部分或单个整数的指针来调用:
int a[10];
int b[10];
int c;
foo(a);
foo(&b[1]);
foo(&c);
void foo(int *array)
,只是为了提醒自己,他们并没有真正传递一个数组,而是指向一个整数的指针,可能还有其他整数在附近。有些人喜欢这样写函数:void foo(int array[])
,以更好地提醒自己应该传递给函数什么。int main(int argc, char* argv)
)NULL
。(类似于char *s="almost a string";
或execve(2)
)printf("%s%i", "hello", 10);
——字符串描述了其他参数。printf(3)
使用stdarg(3)
参数处理,但也可以是数组。)如果你的意思是所有字符串加在一起有多长。
int n=2;
int size=0;
char* array [n] = { "One", "Two"};
for (int i=0;i<n;++i)
size += strlen(array[i];
新增:
是的,这就是我目前正在做的,但我想要删除那个额外的参数。哦,算了吧。
可能会因为这个得到一个不好的回应,但你总可以使用第一个指针来存储大小,只要你不去引用它或者误认为它实际上是一个指针。
char* array [] = { (char*)2,"One", "Two"};
long size=(long)array[0];
for(int i=1; i<= size;++i)
printf("%s",array[i]);
或者您可以将数组以NULL结尾
char* array [] = { "One", "Two", (char*)0 };
for(int i=0;array[i]!=0;++i)
{
printf("%s",array[i]);
}
从指针获取数组大小是不可能的。您可以使用NULL指针终止数组。这样,您的函数就可以搜索NULL指针以了解大小,或者一旦遇到NULL就停止处理输入...
使用新的C++11 std::array
http://www.cplusplus.com/reference/stl/array/
标准数组具有您要查找的size方法
I
而不是i
可能会避免“这是一个合理的问题吗”启发式算法(除了使问题更容易被英语母语人士阅读)。 - sarnold