1)指针的数组表示
在C++内部,用指针来处理数组。
C++编译器把 数组名[下标] 解释为 *(数组首地址+下标)
C++编译器把 地址[下标] 解释为 *(地址+下标)
2)一维数组用于函数的参数
一维数组用于函数的参数时,只能传数组的地址,并且必须把数组长度也传进去,除非数组中有最后一个元素的标志。
书写方法有两种:
void func(int* arr, int len);
void func(int arr[], int len);
注意:
在函数中,可以用数组表示法,也可以用指针表示法。
在函数中,不要对指针名用sizeof运算符,它不是数组名。
1)指针的数组表示
在C++中,数组可以通过指针来处理。实际上,数组名在大多数情况下被视为指向数组第一个元素的指针。因此,数组的元素可以通过指针运算来访问。
示例代码:
#include <iostream>
using namespace std;
int main() {
int numbers[5] = {10, 20, 30, 40, 50};
// 数组名作为指针
cout << "第一个元素: " << *numbers << endl; // 输出 10
// 通过指针运算访问数组元素
cout << "第三个元素: " << *(numbers + 2) << endl; // 输出 30
return 0;
}
上面的代码展示了如何使用指针的数组表示法来访问数组元素。numbers
在没有下标的情况下被视为指向数组首元素的指针。
2)一维数组用于函数的参数
当一维数组作为函数参数时,实际上传递的是数组的首地址(即指针)。为了在函数内部正确处理数组,还需要传递数组的长度。
示例代码:
#include <iostream>
using namespace std;
// 函数声明,使用指针表示数组
void printArray(int* arr, int len) {
for (int i = 0; i < len; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
// 函数声明,使用数组表示法
void modifyArray(int arr[], int len) {
for (int i = 0; i < len; i++) {
arr[i] += 5; // 每个元素增加5
}
}
int main() {
int numbers[] = {1, 2, 3, 4, 5};
int len = sizeof(numbers) / sizeof(numbers[0]);
printArray(numbers, len);
modifyArray(numbers, len);
printArray(numbers, len);
return 0;
}
在这个例子中,printArray
函数用于打印数组元素,而 modifyArray
函数则修改数组中的每个元素。注意,sizeof
运算符只能在定义数组的同一作用域内使用来获取数组的总大小,而不能在接收数组指针的函数中使用来确定数组长度。
注意事项
- 在函数参数中使用
int arr[]
和int* arr
是等价的。 - 传递给函数的数组实际上是通过指针进行的,所以在函数内部使用
sizeof(arr)
将不会返回数组的实际大小,而是返回指针的大小。因此,必须额外传递数组的长度或者某种形式的结束标志。
这样的处理方式确保了数组操作的灵活性和效率。