鱼C论坛

 找回密码
 立即注册
查看: 1926|回复: 1

关于指向指针的指针

[复制链接]
发表于 2016-7-31 23:01:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Vision 于 2016-8-1 08:15 编辑

/*
10.20  用指向指针的指针的方法对5个字符串排序并输出。
*/

  1. #include <stdio.h>
  2. #include <string.h>

  3. int main()
  4. {
  5.         char *s[]={"China","England","Japan","India","America"};
  6.         char t[20];
  7.         char **ps=s;
  8.         int i,j,k;
  9.        
  10.         printf("原顺序:\n");
  11.         for(i=0;i<5;i++)
  12.                 printf("%s  ",*(ps+i));
  13.         printf("\n");
  14.        
  15.         for(i=0;i<4;i++)  //选择法排序
  16.         {
  17.                 k=i;
  18.                 for(j=i+1;j<5;j++)
  19.                         if(strcmp(*(ps+j),*(ps+k))<0) k=j;

  20.                 if(k!=i)
  21.                 {
  22.                         strcpy(t,*(ps+i));
  23.                         strcpy(*(ps+i),*(ps+k));
  24.                         strcpy(*(ps+k),t);
  25.                 }
  26.         }
  27.        
  28.         printf("排序后:\n");
  29.         for(i=0;i<5;i++)
  30.                 printf("%s  ",*(ps+i));
  31.         printf("\n");

  32.         return 0;
  33. }
复制代码


tcc、turboc2.0能通过编译,但运行结果不正确。
gcc能通过编译,但程序不能运行。
vs2010能通过编译,而且运行结果正确!

怎样编写才能使每个编译器编译后都能正确运行?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-8-1 10:16:03 | 显示全部楼层
搞了半天算是弄明白了,正确的代码如下:


  1. /*
  2. 10.20  用指向指针的指针的方法对5个字符串排序并输出。
  3. */

  4. #include <stdio.h>
  5. #include <string.h>

  6. int main()
  7. {
  8.         char s[][20]={"China","England","Japan","India","America"};
  9.         char t[20];
  10.         char *dz[5];
  11.         char **ps;
  12.         int i,j,k;
  13.         for(i=0;i<5;i++)
  14.                 dz[i]=s[i];
  15.         ps=dz;
  16.        
  17.         printf("原顺序:\n");
  18.         for(i=0;i<5;i++)
  19.                 printf("%-8s",*(ps+i));
  20.         printf("\n");
  21.        
  22.         for(i=0;i<4;i++)
  23.         {
  24.                 k=i;
  25.                 for(j=i+1;j<5;j++)
  26.                         if(strcmp(*(ps+j),*(ps+k))<0) k=j;

  27.                 if(k!=i)
  28.                 {
  29.                         strcpy(t,*(ps+i));
  30.                         strcpy(*(ps+i),*(ps+k));
  31.                         strcpy(*(ps+k),t);
  32.                 }
  33.         }
  34.        
  35.         printf("排序后:\n");
  36.         for(i=0;i<5;i++)
  37.                 printf("%-8s",*(ps+i));
  38.         printf("\n");

  39.         return 0;
  40. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-14 16:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表