概念
- 数组名是一个常量指针,它表示数组的首地址,不能被修改,而指针变量是一个变量指针,它可以指向任意地址。
- 数组名和指针变量在sizeof运算符下的结果不同,数组名得到的是整个数组占用的字节数,而指针变量得到的是指针类型的字节数。
- 数组名和指针变量在取地址运算符下的结果不同,数组名得到的是数组第一个元素的地址,而指针变量得到的是自身的地址。
实际使用
分别利用数组名和指针作为函数参数,写一个给数组赋值的函数
利用数组名作为函数参数,给数组赋值的函数可以写成这样:
void assign_array(int arr[], int n, int value) {
for (int i = 0; i < n; i++) {
arr[i] = value;
}
}
利用指针作为函数参数,给数组赋值的函数可以写成这样:
void assign_array(int *arr, int n, int value) {
for (int i = 0; i < n; i++) {
*(arr + i) = value;
}
}
调用
int a[5];
assign_array(a, 5, 10); // 使用数组名作为参数,给数组中的每个元素赋值为10
assign_array(&a[0], 5, 20); // 使用指针作为参数,给数组中的每个元素赋值为20
可以看到,形参 arr[]表示数组名,调用时传入实际数组名a;形参*arr表示指针,调用时传入数组的首地址&a[0]。