一道C语言程序的郁闷
程序题目是输入n个字符串(n<10),然后比较大小,按从小到大排列。本来可以用指针数组的编写,也没有错。我换了个指向数组的指针,但是一编译就出了很多错误,希望高手帮忙看看,详细解释一下错误所在,谢谢了!! 所编程序如下: #include<stdio.h> #include<string.h> void main() { char ch[10][20]; char (*p)[20]; p=ch; int n,i,j; char *temp; printf("输入字符串个数:"); scanf("%d",&n); getchar(); printf("输入字符串:"); for(i=0;i<n;i++) gets(*p++); for(i=0;i<n-1;i++) { for(j=0;j<n-i-1;j++) if(strcmp(*(p+j),*(p+j+1))>0) { temp=p+j; p+j=p+j+1; p+j+1=temp; } } printf("输出排序后的字符串:"); for(i=0;i<n;i++) puts(*p++); }
呵呵,提问者现在不是要用指针数组来解决问题,而是要用数组指针,作为学习,这里面不存在什么“方向性的、极严重的逻辑错误”。就提问者的代码来看,提问者的主要问题还是没有理解什么是“指向数组的指针”。以你的代码中的这一行为例: 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
呵呵,高手如云,敬佩敬佩!
因为j是整形变量,p是执指针变量,所以类型当然不匹配了。 你这样写试试 *temp=*p+j; *p+j=p+j+1; *p+j+1=*temp; 好久没用C++了, 不知道我的回答对不对。
你不仅是语法错了,而且逻辑也错了(方向性的,极严重)。 你可能是希望借助指针的值的交换避免字符串内容的交换,这样可以提高效率,但这样需要为每个字符数组提高一个指针,从你的代码来看,p 应该定义为一个指向字符的字针数组,如char *p[10]; 修改后的代码如下: #include #include void main() { char ch[10][20]; char *p[10]; int n,i,j; char *temp; for (i=0;i0) { temp=p[j]; p[j]=p[j+1]; p[j+1]=temp; } } printf("输出排序后的字符串:"); for(i=0;i
程序中的*p++应改为*(p++),否则相当于(*p)++了
问:C语言(不是C++)能写窗口程序(像软件那样)的程序吗?
答:能,累死你,简单的一个比方,你把成熟语言库里的一个经常用的函数重新编写一遍,你就体验到味道了详情>>
问:计算机三级计算机三级请问全国计算机等级考试中的三级网络技术和数据库哪个好学一些?...
答:如果你理解能力强考数据库,其中比如关系数据库之类的需要去领悟 如果你记忆能力强考网络,各种各样的名词,背下来就得分。 还有官方指定的教材要有,上机最好做一做南开...详情>>
答:c++ 是程序语言 不是系统 谢谢详情>>