目录
#include <iostream>
void printArray(int arr[], int size) {
for (int i = 0; i < size; ++i) {
std::cout << arr[i] << " ";
}
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
printArray(arr, 5); // 传递的是指针和数组大小
return 0;
}
1. 函数参数为数组
在C++中,当我们定义一个函数参数为数组时,比如 void printArray(int arr[], int size)
,数组参数 int arr[]
实际上被解释为指向数组第一个元素的指针,即 int* arr
。这是因为在C++中,函数参数不能真正地是数组,数组参数会自动退化为指向其第一个元素的指针。这种行为称为“数组退化为指针”。因此,在函数 printArray
中,int arr[]
和 int* arr
是等价的。
2. 指针算术
2.1 arr
是指向第一个元素的地址
当你传递数组 arr
给函数 printArray
时,传递的实际上是指向数组第一个元素的指针。对于数组 int arr[5] = {1, 2, 3, 4, 5};
,数组名 arr
在传递时等价于指针 &arr[0]
,即数组第一个元素的地址。
2.2 arr[i]
表示什么?
在 printArray
函数中,当你使用 arr[i]
时,C++ 编译器会将其解释为指针算术和解引用操作。具体来说:
arr
是一个指向int
类型的指针,指向数组的第一个元素。i
是一个整数索引,用于访问数组中的元素。
表达式 arr[i]
可以分解为以下步骤:
- 指针算术:
arr + i
计算指针arr
加上偏移量i
。由于arr
是一个int*
类型的指针,加上i
后得到一个新的指针,指向数组中的第i
个元素。指针算术会自动根据指针类型调整偏移量。例如,如果arr
是int*
类型,每次增加1
意味着增加sizeof(int)
字节。 - 解引用:
*(arr + i)
解引用该指针,访问指针所指向的内存位置的值,即数组中的第i
个元素。
所以,arr[i]
实际上等价于 *(arr + i)
。
标签:arr,指向,int,C++,函数参数,数组,指针 From: https://www.cnblogs.com/keye/p/18305630