关于指向指针的指针
本帖最后由 Vision 于 2016-8-1 08:15 编辑/*
10.20用指向指针的指针的方法对5个字符串排序并输出。
*/
#include <stdio.h>
#include <string.h>
int main()
{
char *s[]={"China","England","Japan","India","America"};
char t;
char **ps=s;
int i,j,k;
printf("原顺序:\n");
for(i=0;i<5;i++)
printf("%s",*(ps+i));
printf("\n");
for(i=0;i<4;i++)//选择法排序
{
k=i;
for(j=i+1;j<5;j++)
if(strcmp(*(ps+j),*(ps+k))<0) k=j;
if(k!=i)
{
strcpy(t,*(ps+i));
strcpy(*(ps+i),*(ps+k));
strcpy(*(ps+k),t);
}
}
printf("排序后:\n");
for(i=0;i<5;i++)
printf("%s",*(ps+i));
printf("\n");
return 0;
}
tcc、turboc2.0能通过编译,但运行结果不正确。
gcc能通过编译,但程序不能运行。
vs2010能通过编译,而且运行结果正确!
怎样编写才能使每个编译器编译后都能正确运行? 搞了半天算是弄明白了,正确的代码如下:
/*
10.20用指向指针的指针的方法对5个字符串排序并输出。
*/
#include <stdio.h>
#include <string.h>
int main()
{
char s[]={"China","England","Japan","India","America"};
char t;
char *dz;
char **ps;
int i,j,k;
for(i=0;i<5;i++)
dz=s;
ps=dz;
printf("原顺序:\n");
for(i=0;i<5;i++)
printf("%-8s",*(ps+i));
printf("\n");
for(i=0;i<4;i++)
{
k=i;
for(j=i+1;j<5;j++)
if(strcmp(*(ps+j),*(ps+k))<0) k=j;
if(k!=i)
{
strcpy(t,*(ps+i));
strcpy(*(ps+i),*(ps+k));
strcpy(*(ps+k),t);
}
}
printf("排序后:\n");
for(i=0;i<5;i++)
printf("%-8s",*(ps+i));
printf("\n");
return 0;
}
页:
[1]