#include<stdio.h> #include<iostream> #define M 100 using namespace std; void px(int *p,int c) { int a[M];p = a; for (int i = 0; i < 5;i++) { for (int j; j < 4 - i;j++) { if(p[j]>p[j+1]) {c = p[j], p[j] = p[j + 1], p[j+1] = c;} } } } int main() { int a[M]; int *p, c; p = a; for (int i = 0;i < 5;i++) cin >> a[i]; px(p, c); for (int i = 0;i < 5;i++) cout<< a[i]<<" "; return 0; }
时间: 2024-01-28 10:05:46 浏览: 47
使用include <iostream>时一定要加using namespace std
这段代码实现了一个冒泡排序算法,但是存在一些问题:
1. 在 `px` 函数中,数组 `a` 是在函数内部声明的,而指针 `p` 却指向了一个未定义的、位于函数栈上的数组 `a`。这样做是不安全的,因为函数执行完毕后,数组 `a` 的内存空间会被释放,指针 `p` 就会变成野指针。
2. 在 `px` 函数中,交换两个元素的代码不够简洁,可以使用 C++ 中的 `std::swap` 函数来代替。
3. 在 `px` 函数中,内层循环的初始值 `j` 没有被初始化,这会导致程序的行为是未定义的。
下面是修改后的代码:
```c++
#include <iostream>
#include <algorithm>
#define M 100
using namespace std;
void px(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]) {
swap(p[j], p[j+1]);
}
}
}
}
int main() {
int a[M];
int n = 5;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
px(a, n);
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
return 0;
}
```
在这个示例中,我们使用一个名为 `n` 的变量来保存数组的元素个数,并将其传递给 `px` 函数。在 `px` 函数中,我们直接使用指针 `p` 来访问数组中的元素,并使用 `std::swap` 函数来交换元素的值。这个函数的实现更加简洁和安全。
输出结果为:
```
1 2 3 4 5
```
阅读全文