首页 > 解决方案 > 函数签名中的大小数组

问题描述

在函数签名中定义大小数组(相对于更常用的无大小数组或指针语法)是否有任何影响?我的编译器完全忽略了它,如下面的示例代码所示(虽然它在传递较小大小的数组时会打印一些垃圾值)。

#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;
}

标签: c++

解决方案


在函数签名中定义大小数组(相对于更常用的无大小数组或指针语法)是否有任何影响?

不,不是你这样做的方式。

另一方面,这将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;
}

推荐阅读