#include<stdio.h> void sort(int **pp,int n) { int *temp; for(int i=0;i<n;i++) { for(int j=0;j<n-1-i;j++) { if(*(pp+j)>*(pp+j+1)) { temp=*(pp+j); *(pp+j)=*(pp+j+1); *(pp+j+1)=temp; } } } } int main() { int n; scanf("%d",&n); int *p[n]; for(int i=0;i<n;i++) { scanf("%d",p[i]); } sort(p,n); for(int i=0;i<n;i++) { printf("%d ",p[i]); } return 0; }
时间: 2023-12-05 12:04:03 浏览: 55
这段代码有一些问题。首先是在主函数中定义了一个指针数组p,但没有为每个指针分配内存。其次,在读入p数组的值时,需要使用&运算符获取每个指针的地址。最后,在sort函数中,需要使用*运算符来获取指针所指向的值。
以下是修改后的代码:
```c
#include <stdio.h>
void sort(int **pp, int n) {
int *temp;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n - 1 - i; j++) {
if(*pp[j] > *pp[j + 1]) {
temp = pp[j];
pp[j] = pp[j + 1];
pp[j + 1] = temp;
}
}
}
}
int main() {
int n;
scanf("%d", &n);
int *p[n];
for(int i = 0; i < n; i++) {
p[i] = (int *)malloc(sizeof(int)); // 为每个指针分配内存
scanf("%d", p[i]);
}
sort(p, n);
for(int i = 0; i < n; i++) {
printf("%d ", *p[i]); // 输出指针所指向的值
free(p[i]); // 释放内存
}
return 0;
}
```
注意,在使用动态内存分配函数malloc分配内存时,需要在程序结束前使用free函数释放内存。