一道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