【发布时间】:2011-11-08 01:57:11
【问题描述】:
我声明以下数组:
char* array [2] = { "One", "Two"};
我将这个数组传递给一个函数。如何在函数中找到这个数组的长度?
【问题讨论】:
-
char star == 字符指针
-
顺便说一句,使用
I而不是i可能有助于避免“这是一个合理的问题”启发式(除了让以英语为母语的人更容易阅读问题之外)。跨度>
我声明以下数组:
char* array [2] = { "One", "Two"};
我将这个数组传递给一个函数。如何在函数中找到这个数组的长度?
【问题讨论】:
I 而不是i 可能有助于避免“这是一个合理的问题”启发式(除了让以英语为母语的人更容易阅读问题之外)。跨度>
在将数组传递给函数后,如果不付出额外的努力,就无法找到数组的长度。您需要:
vector(推荐)。1 如果您想知道,大多数人都会对 C 字符串以这种方式工作这一事实感到遗憾。
【讨论】:
当您传递一个数组时,不是一种简单的方法来确定函数内的大小。
您可以将数组大小作为参数传递 要么 使用 std::vector<:string>
如果您觉得特别喜欢冒险,可以使用some advanced template techniques
简而言之,它看起来像
template <typename T, size_t N>
void YourFunction( T (&array)[N] )
{
size_t myarraysize = N;
}
【讨论】:
int main(argc,char**argv)。如果它是简单的 main 会以不同的方式完成。
C 在你背后耍花招。
void foo(int array[]) {
/* ... */
}
void bar(int *array) {
/* ... */
}
这两个是相同的:
6.3.2.1.3:除非是sizeof运算符或一元&运算符的操作数, 或者是用于初始化数组的字符串文字,具有类型的表达式 ''array of type'' 被转换为类型为''pointer to type'' 的表达式 指向数组对象的初始元素并且不是左值。如果 数组对象有寄存器存储类,行为未定义。
结果,你不知道,在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) 参数处理,但是
它也可以很容易地成为一个数组。)【讨论】:
无法从指针获取数组大小。您可以使用 NULL 指针终止数组。这样,您的函数可以搜索 NULL 指针以了解大小,或者只是在遇到 NULL 时停止处理输入...
【讨论】:
如果您的意思是所有字符串加在一起的时间。
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* 数组 [] = { "一", "二", (char*)0 };
for(int i=0;array[i]!=0;++i)
{
printf("%s",array[i]);
}
【讨论】:
使用新的 C++11 std::array
http://www.cplusplus.com/reference/stl/array/
标准数组具有您正在寻找的大小方法
【讨论】: