答案是:在C++中传递数组时实际传递的是首元素指针,函数参数可声明为指针类型以操作原数组,如void printArray(int* arr, int size)通过指针遍历数组。
在C++中,将数组传递给函数时,实际上传递的是指向数组首元素的指针。数组名在大多数情况下会自动退化为指针,因此函数参数中接收数组时,本质上是通过指针操作原数组的数据。下面介绍几种常见方式及注意事项。 使用指针接收数组 当把数组传入函数时,可以声明参数为指针类型,指向数组元素的类型。这样函数内可通过指针对数组进行访问和修改。 示例: void printArray(int* arr, int size) { for (int i = 0; i std::cout } std::cout } int main() { int data[] = {1, 2, 3, 4, 5}; printArray(data, 5); // 传入数组名,实际是首元素地址 return 0; } 这里 data 是数组名,传给 int* arr ,函数内部可读写原数组内容。 使用数组语法声明参数(等价于指针) 虽然写成数组形式,但编译器仍将其视为指针。以下两种声明等价: 立即学习 “ C++免费学习笔记(深入) ”; void func(int arr[], int size); void func(int* arr, int size); 说明: 写成 int arr[] 只是语义上更清晰,实际仍是指针。 无法在函数内用 sizeof(arr) 获取数组真实长度,因为 arr 是指针。 传递多维数组(以二维为例) 对于二维数组,必须指定除第一维外的所有维度大小,因为编译器需要知道如何计算元素地址。 C知道 CSDN推出的一款AI技术问答工具 下载 示例: void print2D(int arr[][3], int rows) { for (int i = 0; i for (int j = 0; j std::cout } std::cout } } 调用时: int matrix[2][3] = {{1,2,3}, {4,5,6}}; print2D(matrix, 2); 注意: 参数必须写成 int arr[][3] ,不能只写 int arr[][] 。 使用引用传递保留数组大小信息 若希望函数知道数组的真实大小,可使用引用方式传参,避免退化为指针。 示例: template