如何理解foo(char (&p)[10])?
How to understand foo(char (&p)[10])?
#include <iostream>
void foo(char (&p)[10]) {
printf("%dn", sizeof(p));
}
char p[10] = "aaa";
int main() {
foo(p);
}
代码输出10
,但我无法理解。
这里char (&p)[10]
的含义是什么?
foo()
被声明为一个函数,专门获取对大小为10
的char
数组的引用,而不进行任何数组到指针的转换。
由于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]);
就这样。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 如何理解C++标准N3337中的expr.const.cast子句8
- C++,我收到一个无法理解的编译器错误
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 理解c++中的引用
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- Python中的for循环与C++有何不同
- 通过实例理解std::move及其目的
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 试图理解类对象的行为
- 难以理解某些人解决IOI问题的源代码
- 有人能帮我理解这个c++代码吗
- 理解循环C++中的循环
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 理解这行C++指针代码
- 理解GCC中的std::pow实现
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- 如何理解新的运算符重载?
- 为什么理解这个递归示例如此难以转化为直觉?
- 如何理解foo(char (&p)[10])?