c++ - 函数签名中的大小数组
问题描述
在函数签名中定义大小数组(相对于更常用的无大小数组或指针语法)是否有任何影响?我的编译器完全忽略了它,如下面的示例代码所示(虽然它在传递较小大小的数组时会打印一些垃圾值)。
#include <iostream>
using namespace std;
void printArray(int intArray[5]) {
for (int i = 0; i < 5; i++) {
cout << intArray[i] << " ";
}
cout << endl;
}
int main()
{
int array1[1] = {1}; // Smaller array size than in the function signature
cout << "\nInvocation 1\n";
printArray(array1);
int array2[4] = {1, 2, 3, 4}; // Smaller array size than in the function signature
cout << "\nInvocation 2\n";
printArray(array2);
int array3[8] = {1, 2, 3, 4, 5, 6, 7, 8}; // Larger array size than in the function signature
cout << "\nInvocation 3\n";
printArray(array3);
return 0;
}
解决方案
在函数签名中定义大小数组(相对于更常用的无大小数组或指针语法)是否有任何影响?
不,不是你这样做的方式。
另一方面,这将intArray
引用您作为参数传递的数组:
void printArray(int (&intArray)[5]) {
for (int i = 0; i < 5; i++) {
cout << intArray[i] << " ";
}
cout << endl;
}
更通用的形式是使其成为功能模板。然后将为您调用它的每个数组大小实例化一次:
template<std::size_t N>
void printArray(int (&intArray)[N]) {
for (int i = 0; i < N; i++) {
cout << intArray[i] << " ";
}
cout << endl;
}
推荐阅读
- php - SELECT * FROM table WHERE name LIKE "'.search_variable.' “不起作用
- javascript - Form.io 自定义布局组件
- python - 复制列表更改原始列表(python)?
- sql - sql多次计数
- docker - 向工件添加新的密钥库会破坏现有的 https 连接
- c++ - 按方案排序矩阵
- r - 盒子状态值(颜色)可以在 Shinydashboard 中是反应性的和有条件的吗?
- docker - Docker CentOS - 添加 EPEL
- javascript - Rails webpacker OpenLayers。未捕获的 ReferenceError:未定义 ol。已修复但未解决
- swift - 无法将“Int”类型的值转换为预期的参数类型“Bool”