Zijeak
2018-11-21 10:08
采纳率: 66.7%
浏览 505
已采纳

【C语言问题】同一个问题利用指针的两种实现,另一种出现问题,求大佬解答

题目:编写一个程序,输入5个城市名,按字母表顺序对这5个城市排序输出

这是一种实现方式


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 int main()
{
    char city[6][10]={"beijing","shenzhen","nanjing","dalian","shanghai","qingdao"};//存储城市名 
    char *ptstr[6];//指针数组
    int i;
    for(i=0;i<6;i++)
    {
        ptstr[i]=city[i];//令指针指向城市名 
    } 
    char *temp;
    int m,n;
    //用冒泡排序法进行排序
    for(m=1;m<6;m++)
    {
        for(n=1;n<6-m;n++)
        {
            if(strcmp(ptstr[n-1],ptstr[n])>0)
            {
                temp=ptstr[n-1];
                ptstr[n-1]=ptstr[n];
                ptstr[n]=temp;
            }
        }
    }
    for(i=0;i<6;i++)
     puts(ptstr[i]);
    return 0;
}


但改用另一种方式就无法通过编译

另一种方式的实现如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char city[6][10];//存储城市名 
    int i;
    for(i=0;i<6;i++)
    {
        gets(city[i]);
    } 
    char *temp;
    int m,n;
    //用冒泡排序法进行排序
    for(m=1;m<6;m++)
    {
        for(n=1;n<6-m;n++)
        {
            if(strcmp(city[n-1],city[n])>0)
            {
                temp=city[n-1];
                city[n-1]=city[n];
                city[n]=temp;
            }
        }
    }
    for(i=0;i<6;i++)
     puts(city[i]);
    return 0;
}


数组名同样是指向数组的指针,为何第二个版本的代码会出错

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • threenewbee 2018-11-21 11:40
    已采纳
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main()
    {
        char city[6][10];//存储城市名 
        int i,j; //改
        for(i=0;i<6;i++)
        {
            gets(city[i]);
        } 
        char temp[10];
        int m,n;
        //用冒泡排序法进行排序
        for(m=0;m<6;m++) //改
        {
            for(n=1;n<6-m;n++)
            {
                if(strcmp(city[n-1],city[n])>0)
                {
                    for (j = 0; j < 10; j++) //改
                    {
                        temp[j]=city[n-1][j];
                        city[n-1][j]=city[n][j];
                        city[n][j]=temp[j];
                    }
                }
            }
        }
        for(i=0;i<6;i++)
         puts(city[i]);
        return 0;
    }
    
    打赏 评论

相关推荐 更多相似问题