Tôi đã viết qsort này:con trỏ Void trong C++
void qsort(void *a[],int low,int high, int (*compare)(void*,void*));
Khi tôi gọi đây trên
char *strarr[5];
Nó nói chuyển đổi không hợp lệ từ char ** để làm mất hiệu lực **. Tại sao điều này là sai?
Đây là mã:
#include<cstdlib>
#include<cstdio>
#include<iostream>
using namespace std;
inline void strswap(void *a,void *b) {
char *t=*(char**)a;
*(char**)a=*(char**)b;
*(char**)b=t;
}
int strcompare(void *a, void *b) {
return strcmp(*(char**)a,*(char**)b);
}
void qsort1(void *a[],int low,int high, int (*compare)(void*,void*), void (*swap)(void*,void*)) {
if(low>=high)
return;
int q=low-1;
for(int i=low;i<=high-1;i++)
if((*compare)(&a[i],&a[high]) < 0)
swap(&a[i],&a[++q]);
swap(&a[high],&a[++q]);
qsort1(a,low,q-1,compare,swap);
qsort1(a,q+1,high,compare,swap);
}
int main() {
const int n=3;
//int a[n]={4,6,8,12,10,9,8,0,24,3};
char *strarr[5]={"abcd","zvb","cax"};
qsort1(strarr,0,n-1,strcompare,strswap);
for(int i=0;i<n;i++)
cout << strarr[i] << " ";
cout << endl;
return 0;
}
tại sao bạn đã gắn thẻ tên này là C? –
Ồ, khi nói "Tại sao điều này sai?" sau đó tôi có thể liệt kê * rất nhiều thứ *. – Puppy
@DeadMG là chính xác. Tìm hiểu về 'std :: vector',' std :: string' và 'std :: sort'. Nếu bạn cần trợ giúp chuyển đổi mã của bạn thành hiện thực C++, hãy hỏi. –