有个讲的很好的博客:https://blog.csdn.net/u010603292/article/details/9396797
总之就是二维数组和二重指针不能简单混用,若非要混用,就必须要用一个中转指针数组记录二维数组的所有一维指针然后将这个中转指针数组的名字赋值给那个二重指针,那么实际上这个二重指针中存着的就是一些一维指针。
下面是一个例题的代码帮助理解:
#include<stdio.h>
#include<string.h>
const int N = 10;
const int MAX = 105;
void sort(char **p)
{
for(int i=0;i<9;++i)
{
for(int j=0;j<9-i;++j)
{
if(strcmp(p[j],p[j+1])>0)
{
char *temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}
}
}
int main()
{
char *pstr[N],**p,str[N][MAX];
for(int i=0;i<N;++i) gets(str[i]);
for(int i=0;i<N;++i) pstr[i]=str[i];
p=pstr;
sort(p);
for(int i=0;i<N;++i) puts(*(p+i));
return 0;
}
#include<stdio.h>
#include<string.h>
const int N = 10;
const int MAX = 105;
void sort(char **p)
{
for(int i=0;i<9;++i)
{
for(int j=0;j<9-i;++j)
{
char temp[105];
if(strcmp(p[j],p[j+1])>0)
{
strcpy(temp,p[j]);
strcpy(p[j],p[j+1]);
strcpy(p[j+1],temp);
}
}
}
}
int main()
{
char *pstr[N],**p,str[N][MAX];
for(int i=0;i<N;++i) gets(str[i]);
for(int i=0;i<N;++i) pstr[i]=str[i];
p=pstr;
sort(p);
for(int i=0;i<N;++i) puts(*(p+i));
return 0;
}