如何理解foo(char(& p)[10])?

时间:2016-01-28 13:55:29

标签: c++

#include <iostream>

void foo(char (&p)[10]) {
    printf("%d\n", sizeof(p));
}

char p[10] = "aaa";

int main() {
    foo(p);
}

代码输出10,但我无法理解。

这里char (&p)[10]的含义是什么?

3 个答案:

答案 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]);

这就是全部。