#include <iostream>
void foo(char (&p)[10]) {
printf("%d\n", sizeof(p));
}
char p[10] = "aaa";
int main() {
foo(p);
}该代码输出10,但我无法理解。
char (&p)[10]在这里的意思是什么?
发布于 2016-01-28 14:00:16
函数foo的参数是对由10个元素组成的char数组(char ... [10])的引用(&)。参数名为p。引用意味着您将参数指定为- is (不需要指针或地址),因此在foo(p)中调用p是正确的方法,考虑到p是如何声明的。函数foo总是打印10,因为它的参数大小为10字节。
发布于 2016-01-28 13:59:27
foo()被声明为一个函数,它专门获取对大小为10的char数组的引用,而不发生任何数组到指针的转换。
既然sizeof(char)是1,那么sizeof(char[10])是10,这就是为什么你的程序打印10。
发布于 2016-01-28 13:59:56
当应用程序区域的细节调用特定大小的数组(数组大小是编译时常量)时,将这样的数组传递给函数的方法之一是使用指针到数组参数。
void foo(char (*p)[10]);在您的例子中,您有非常类似的情况,但是通过引用来完成:
void foo(char (&p)[10]);就这样。
https://stackoverflow.com/questions/35063454
复制相似问题