在 C 中传递对二维数组的引用
在 C 中,将对二维数组的引用传递给函数可能很棘手。考虑以下代码:
<code class="cpp">const int board_width = 80; const int board_height = 80; void do_something(int[board_width][board_height]& array); //function prototype</code>
此原型从 g 生成错误:
error: expected ‘,’ or ‘...’ before ‘*’ token
错误解释和解决方案
此错误表示星号 (*) 所在的位置缺少某些内容。引用的声明应使用以下语法:
<code class="cpp">void do_something(int (&array)[board_width][board_height]);</code>
通过在数组周围添加括号,我们创建对整个二维数组的引用。这允许函数 do_something 直接修改数组。
与指针声明的区别
请注意,这与使用指针类型声明参数不同:
<code class="cpp">void do_something(int array[board_width][board_height]);</code>
这种情况下,只传递指向二维数组第一个子数组的指针,忽略 board_width。这是因为 C 中的数组在传递给函数时会退化为指针。由于原型中明确要求引用,因此此声明不正确。
大小计算
使用引用时,函数内的 sizeof(array) 将产生 sizeof (int[板宽度][板高度])。相反,使用基于指针的声明将导致 sizeof(int(*)[board_height]),它对应于指针的大小。
以上是如何在 C 中正确传递对二维数组的引用?的详细内容。更多信息请关注PHP中文网其他相关文章!