- 一道C语言程序的郁闷程序题目是输入n个字符串(n<10),
- 题目是输入n个字符串(n<10),然后比较大小,按从小到大排列。本来可以用指针数组的编写,也没有错。我换了个指向数组的指针,但是一编译就出了很多错误,希望高手帮忙看看,详细解释一下错误所在,谢谢了!!
所编程序如下:
#include
#include
void main()
{
char ch[10,20];
char (*p)[20];
p=ch;
int n,i,j;
char *temp;
printf("题目是输入n个
- 呵呵,提问者现在不是要用指针数组来解决问题,而是要用数组指针,作为学习,这里面不存在什么“方向性的、极严重的错误”。就提问者的代码来看,提问者的主要问题还是没有理解什么是“指向数组的指针”。以你的代码中的这一行为例:
temp=p+j;
temp是什么?是一个char型指针!p+j是什么?是一个指向char [20]的指针!两者根本不是同一种类型,怎么能等于呢?就算要等于,也是temp=*(p+j)。
后面的两行
p+j=p+j+1;
p+j+1=temp;
也有同样的问题。当然,后面这两行还有另一个更深入些的问题,就是数组与指针的区别问题,以及等于表达的使用问题。对这个问题我不深入展开了。只提出两个问题供你思考:
首先:如果我说3+5=6+8这个表达式是否成立,你肯定会说不成立;
又:假如有数组int a[10];又有一个已经分配了地址空间的int *p;表达式a=p能否成立?或者a++;这个语句是否成立?显然不成立!
搞清了这两个问题你就明白了*(p+j)=*(p+j+1)也是行不通的,尽管道理上讲好象是对的。
因此,你的代码可以这样修改,仍然使用数组指针:
(直接拷贝到VC下编译即可,如果你自己手工修改原来的代码,请注意除了上面的3行代码外,还有另外的几处修改!)
#include
#include
#include "stdlib.h"
void main()
{
char ch[10,20];
char (*p)[20];
p=&ch[0];
int n,i,j;
char *temp;
temp=(char *)malloc(sizeof(char)*20);
printf("输入字符串个数:");
scanf("%d",&n);
getchar();
printf("输入字符串:");
for(i=0;i0)
{
strcpy(temp,*(p+j));
strcpy(*(p+j),*(p+j+1));
strcpy(*(p+j+1),temp);
}
}
printf("输出排序后的字符串:");
for(i=0;i