函数的形参用指针和数组名的区别
时间: 2023-09-02 09:09:37 浏览: 52
函数的形参可以用指针或者数组名,它们的区别在于:
1. 指针作为函数的形参,需要在函数内部显式地进行解引用操作,才能访问指针所指向的变量。而数组名作为函数的形参,在函数内部可以直接访问数组元素,无需进行解引用操作。
2. 当数组名作为函数的形参时,数组的大小信息会丢失,函数内部无法得知数组的实际大小。而当指针作为函数的形参时,可以通过传递数组的长度信息,来确保函数内部不会访问到数组之外的内存空间。
3. 如果在函数内部修改指针的值,那么函数外部的指针值不会被改变。而如果在函数内部修改数组名所指向的数组元素的值,那么函数外部的数组元素的值也会被改变。
需要注意的是,数组名作为函数形参时,其实是将数组的首地址传递给函数,因此在函数内部对数组名进行加减操作,其实是对数组的首地址进行加减操作。
相关问题
用指针做形参和用数组做形参的区别
在C/C++语言中,用指针作为函数的形参和用数组作为函数的形参的区别主要有以下几点:
1. 用指针作为函数的形参时,指针可以指向一个变量,也可以指向数组,可以通过指针操作指向的内存地址。而用数组作为函数的形参时,数组名实际上是数组首元素的地址,因此传递的是整个数组的值,不能直接操作数组名所指向的内存地址。
2. 用数组作为函数的形参时,大小必须明确指定,不能修改大小。而用指针作为函数的形参时,可以根据需要修改指针指向的内存区域。
3. 用数组作为函数的形参时,数组本身会被复制,因此会占用额外的内存空间。而用指针作为函数的形参时,只是传递了指针所指向的地址,不会占用额外的内存空间。
4. 用数组作为函数的形参时,数组元素不可以为NULL。而用指针作为函数的形参时,指针可以为NULL,因此在使用指针时需要进行空指针判断。
5. 在函数内部修改指向数组的指针不会影响外部数组本身。而在函数内部修改指向指针的指针也可以修改外部数组本身。
定义冒泡排序函数。实参数组名,形参指针
以下是C++语言的冒泡排序函数,其中实参数组名为arr,形参指针为p,函数使用了指针来操作数组:
```cpp
void bubbleSort(int* p, int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (*(p + j) > *(p + j + 1)) {
int temp = *(p + j);
*(p + j) = *(p + j + 1);
*(p + j + 1) = temp;
}
}
}
}
```
使用方法如下:
```cpp
int arr[] = { 5, 2, 8, 3, 1, 6 };
int n = sizeof(arr) / sizeof(int);
bubbleSort(arr, n);
```