我的IDE是codeblocks,内置编译器是gcc。win7 64bit。
如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <exception>
#include <algorithm>
using namespace std;
int cmp(const void* a,const void* b)
{
return strcmp(*(char **)a,*(char**)b);
}
int main()
{
char ss[5][20] = {"hello","world","a","b","aa"};
char** s = (char **)new char[5];
for(int i=0;i <5;++ i)
{
s[i] = new char[20];
strcpy(s[i],ss[i]);
}
puts("before sort:");
for(int i=0;i <5;++ i) printf("%s\n",s[i]);
qsort(s,5,sizeof(char *),cmp);
puts("after sort:");
for(int i=0;i <5;++ i) printf("%s\n",s[i]);
return 0;
}
上面一旦使用了char**开辟字符串数组就必须用sizeof(char )和(char **),但是用char[][]初始化之后的数组又必须用sizeof(s[0])和(char *),这里面的原因是什么?char[][]不是按照数组名编译器当成指针来用的原则吗?