#include <iostream>
void foo(char (&p)[10]) {
printf("%d\n", sizeof(p));
}
char p[10] = "aaa";
int main() {
foo(p);
}
代码输出10
,但我无法理解。
这里char (&p)[10]
的含义是什么?
答案 0 :(得分:2)
foo()
被声明为一个函数,专门获取对大小为char
的{{1}}数组的引用,而不会发生任何数组到指针的转换。
由于10
为1,因此sizeof(char)
为10.这就是您的程序打印10的原因。
答案 1 :(得分:1)
函数foo
的参数是对10个元素&
的{{1}}数组的引用(char
)。参数的名称是char ... [10]
。引用意味着您按原样指定参数(不需要指针或地址),因此在p
中调用foo(p)
是正确的方法,因为main
是如何声明的。函数p
总是打印10,因为它的参数大小为10个字节。
答案 2 :(得分:0)
当应用程序区域的细节调用特定固定大小的数组(数组大小是编译时常量)时,将这样的数组传递给函数的方法之一是使用指向数组的指针参数
void foo(char (*p)[10]);
在您的情况下,您的情况非常相似,但是通过引用完成:
void foo(char (&p)[10]);
这就是全部。