当数组作为子函数的形参时,主函数能直接使用指针形式吗
时间: 2023-05-24 10:05:38 浏览: 55
是的,在大多数情况下,当数组作为子函数的实参时,实际上传递的是数组的地址,因此主函数可以直接使用指针形式。例如:
```c++
#include <iostream>
using namespace std;
void printArray(int *arr, int size) {
for(int i=0; i<size; i++) {
cout << arr[i] << " ";
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
printArray(arr, 5); // 传递数组的地址
return 0;
}
```
在上述代码中,`printArray` 函数接收一个整型指针 `arr` 和一个整型变量 `size`,其中 `arr` 实际上是主函数中定义的 `arr` 数组的地址。在主函数中调用 `printArray` 时,传递了 `arr` 数组的地址作为实参。在 `printArray` 函数内部,使用指针形式访问数组元素,输出了 `arr` 数组的所有元素。因此,主函数可以直接使用指针形式传递数组。
相关问题
用数组在子函数中作为形参与用数组作为形参有什么区别
用数组在子函数中作为形参和用数组作为形参是相同的,只是语法略有不同。在C语言中,一般使用指针来传递数组作为函数参数,因为数组作为函数参数时,它会被转换为指向数组首元素的指针。
使用指针作为形参,可以通过指针访问原始数组,并且可以修改数组中的元素。而使用数组作为形参时,函数中不能修改原始数组中的元素,因为数组作为参数是按值传递,相当于复制了一份原始数组,在函数内部修改的是这份复制的数组。
示例代码:
使用指针作为形参:
```c
void printArray(int *arr, int size) {
for(int i=0; i<size; i++) {
printf("%d ", *(arr + i));
}
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int size = sizeof(arr)/sizeof(arr[0]);
printArray(arr, size);
return 0;
}
```
使用数组作为形参:
```c
void printArray(int arr[], int size) {
for(int i=0; i<size; i++) {
printf("%d ", arr[i]);
}
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int size = sizeof(arr)/sizeof(arr[0]);
printArray(arr, size);
return 0;
}
```
子函数用指针作为形参时,主函数调用子函数时为什么要加&
取地址符(&)?
在子函数中使用指针形参时,需要传入该指针所指向的地址,才能通过指针来修改实参的值。而在主函数中,我们需要把实参的地址传递给子函数才能完成这个任务。因此,为了获取实参的地址,我们需要在调用子函数时使用取地址符(&)来获取实参的地址,并将其传递给指针形参。这样子函数就可以通过指针来访问和修改实参的值了。