引用形式参数能方便地修改实参变量,是不是意味着指针形参从此不需要了?
时间: 2023-05-12 18:03:03 浏览: 117
不完全正确。虽然引用形式参数可以方便地修改实参变量,但指针形参仍然有其独特的用途,比如可以用来实现动态内存分配和释放。此外,指针形参还可以用来实现函数返回多个值的功能。因此,引用形式参数和指针形参都有各自的优缺点,需要根据具体情况选择使用。
相关问题
2. 定义长度为3的整型数组,采用函数调用实现按照从大到小的顺序排序。在主函数中输出排序前和排序后的数组。按以下四种方法实现: (1)实参、形参为数组名; (2)实参为数组名,形参为指针变量; (3)实参为指针变量,形参为数组名; (4)实参为指针变量,形参为指针变量。
好的,我会尽力给予解答。
首先,我们可以通过实现一个排序函数来对数组进行排序。下面是一个简单的冒泡排序函数:
```c++
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] < arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
```
接下来,我们来逐个实现四种方法:
(1)实参、形参为数组名
```c++
#include <iostream>
using namespace std;
void bubbleSort(int arr[], int n);
int main() {
int arr[] = {3, 1, 5};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "排序前:" << endl;
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
bubbleSort(arr, n);
cout << "排序后:" << endl;
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] < arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
```
(2)实参为数组名,形参为指针变量
```c++
#include <iostream>
using namespace std;
void bubbleSort(int *arr, int n);
int main() {
int arr[] = {3, 1, 5};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "排序前:" << endl;
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
bubbleSort(arr, n);
cout << "排序后:" << endl;
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
void bubbleSort(int *arr, int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (*(arr + j) < *(arr + j + 1)) {
int temp = *(arr + j);
*(arr + j) = *(arr + j + 1);
*(arr + j + 1) = temp;
}
}
}
}
```
(3)实参为指针变量,形参为数组名
```c++
#include <iostream>
using namespace std;
void bubbleSort(int arr[], int n);
int main() {
int arr[] = {3, 1, 5};
int n = sizeof(arr) / sizeof(arr[0]);
int *p = arr;
cout << "排序前:" << endl;
for (int i = 0; i < n; i++) {
cout << *(p + i) << " ";
}
cout << endl;
bubbleSort(p, n);
cout << "排序后:" << endl;
for (int i = 0; i < n; i++) {
cout << *(p + i) << " ";
}
cout << endl;
return 0;
}
void bubbleSort(int *arr, int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] < arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
```
(4)实参为指针变量,形参为指针变量
```c++
#include <iostream>
using namespace std;
void bubbleSort(int *arr, int n);
int main() {
int arr[] = {3, 1, 5};
int n = sizeof(arr) / sizeof(arr[0]);
int *p = arr;
cout << "排序前:" << endl;
for (int i = 0; i < n; i++) {
cout << *(p + i) << " ";
}
cout << endl;
bubbleSort(p, n);
cout << "排序后:" << endl;
for (int i = 0; i < n; i++) {
cout << *(p + i) << " ";
}
cout << endl;
return 0;
}
void bubbleSort(int *arr, int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (*(arr + j) < *(arr + j + 1)) {
int temp = *(arr + j);
*(arr + j) = *(arr + j + 1);
*(arr + j + 1) = temp;
}
}
}
}
```
以上就是四种方法的实现方式,你可以运行代码来验证它们的正确性。
用c语言定义长度为3的整型数组,采用函数调用实现按照从大到小的顺序排序。在主函数中输出排序前和排序后的数组。按以下四种方法实现: (1)实参、形参为数组名; (2)实参为数组名,形参为指针变量; (3)实参为指针变量,形参为数组名; (4)实参为指针变量,形参为指针变量。
好的,下面是四种方法的示例代码:
(1)实参、形参为数组名
```c
#include <stdio.h>
void sort1(int arr[]) {
if (arr[0] < arr[1]) {
int temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
if (arr[0] < arr[2]) {
int temp = arr[0];
arr[0] = arr[2];
arr[2] = temp;
}
if (arr[1] < arr[2]) {
int temp = arr[1];
arr[1] = arr[2];
arr[2] = temp;
}
}
int main() {
int arr[3] = {3, 2, 1};
printf("排序前: %d %d %d\n", arr[0], arr[1], arr[2]);
sort1(arr);
printf("排序后: %d %d %d\n", arr[0], arr[1], arr[2]);
return 0;
}
```
(2)实参为数组名,形参为指针变量
```c
#include <stdio.h>
void sort2(int* arr) {
if (arr[0] < arr[1]) {
int temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
if (arr[0] < arr[2]) {
int temp = arr[0];
arr[0] = arr[2];
arr[2] = temp;
}
if (arr[1] < arr[2]) {
int temp = arr[1];
arr[1] = arr[2];
arr[2] = temp;
}
}
int main() {
int arr[3] = {3, 2, 1};
printf("排序前: %d %d %d\n", arr[0], arr[1], arr[2]);
sort2(arr);
printf("排序后: %d %d %d\n", arr[0], arr[1], arr[2]);
return 0;
}
```
(3)实参为指针变量,形参为数组名
```c
#include <stdio.h>
void sort3(int arr[3]) {
if (arr[0] < arr[1]) {
int temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
if (arr[0] < arr[2]) {
int temp = arr[0];
arr[0] = arr[2];
arr[2] = temp;
}
if (arr[1] < arr[2]) {
int temp = arr[1];
arr[1] = arr[2];
arr[2] = temp;
}
}
int main() {
int arr[3] = {3, 2, 1};
printf("排序前: %d %d %d\n", arr[0], arr[1], arr[2]);
sort3(arr);
printf("排序后: %d %d %d\n", arr[0], arr[1], arr[2]);
return 0;
}
```
(4)实参为指针变量,形参为指针变量
```c
#include <stdio.h>
void sort4(int* a, int* b, int* c) {
if (*a < *b) {
int temp = *a;
*a = *b;
*b = temp;
}
if (*a < *c) {
int temp = *a;
*a = *c;
*c = temp;
}
if (*b < *c) {
int temp = *b;
*b = *c;
*c = temp;
}
}
int main() {
int a = 3, b = 2, c = 1;
printf("排序前: %d %d %d\n", a, b, c);
sort4(&a, &b, &c);
printf("排序后: %d %d %d\n", a, b, c);
return 0;
}
```
这四种方法都可以实现将数组按从大到小的顺序进行排序,只是形参和实参的类型不同。其中第一种方法和第二种方法比较常见,建议使用其中的一种。
阅读全文