Zijeak 2018-11-21 10:08 采纳率: 33.3%
浏览 506
已采纳

【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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建