【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;
}
数组名同样是指向数组的指针,为何第二个版本的代码会出错
答
#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;
}