【发布时间】:2014-12-09 23:55:25
【问题描述】:
在下面的示例中,是否可以使用这样的签名声明 test() 以便打印6?出于样式和可读性的目的,我希望这样做,因此很明显该函数需要一个正好 6 个字符的数组,并且它实际上可以通过 sizeof 获取此信息。
#include <stdio.h>
void test( char foo[ 6 ] )
{
printf( "%zu\n", sizeof( foo ) ); // Prints 8 as it's a pointer now, but I want 6 as in an array
}
int main()
{
char foo[ 6 ];
printf( "%zu\n", sizeof( foo ) ); // Prints 6, which is what I want
test( foo );
return 0;
}
到目前为止,我能想到的最好的是:
typedef char Foo[ 6 ];
void test( Foo foo )
{
printf( "%zu\n", sizeof( Foo ) ); // Works, but it doesn't even use foo, and I want to get the size information from foo! What if I change the signature of the function later? I would have to update this line too, which is something I'd like to avoid
}
【问题讨论】:
-
这段代码真的可以编译吗?无论如何,只需将您想要的大小作为附加参数传递给方法,或扫描空值或类似的东西。
-
您不能将数组传递给 C 中的函数。就像,完全一样。您所能做的就是传递指针,例如指向 6 个
char的数组的指针。尽管@RobertHarvey 提到了任何理智的人如何在 C 中处理它。 -
我希望
6只出现一次,所以如果需要更改,只有一个地方可以这样做。我当然可以定义它,但这有点过于冗长了。 -
OP,难道你真的想使用 C++ 而不是 C?
-
我只想传递一个普通的指针。随着编译器跟踪它指向 6 个元素,而不是任意数量。那有什么问题?如果这是不可能的,很好,我很乐意接受这个作为答案。