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

How to understand foo(char (&p)[10])?

本文关键字:何理解 foo char      更新时间:2023-10-16
#include <iostream>
void foo(char (&p)[10]) {
    printf("%dn", sizeof(p));
}
char p[10] = "aaa";
int main() {
    foo(p);
}

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

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

foo()

声明为一个函数,专门获取对大小为10char数组的引用,而不进行任何数组到指针的转换。

由于sizeof(char)是 1,那么sizeof(char[10])是 10。这就是您的程序打印 10 的原因。

函数

foo的参数是对10个元素(char ... [10])的char数组的引用(&)。参数的名称为 p 。引用意味着按原样指定参数(不需要指针或地址),因此在main中调用foo(p)是正确的方法,因为p的声明方式。该函数foo始终打印 10,因为它的参数大小为 10 个字节。

当应用程序区域的细节需要特定固定大小的数组(数组大小是编译时常量)时,将此类数组传递给函数的方法之一是使用指向数组的指针参数

void foo(char (*p)[10]);

在您的情况下,您有非常相似的情况,但通过参考完成:

void foo(char (&p)[10]);

就这样。