一道C语言程序的郁闷程序题目是输
呵呵,提问者现在不是要用指针数组来解决问题,而是要用数组指针,作为学习,这里面不存在什么“方向性的、极严重的逻辑错误”。就提问者的代码来看,提问者的主要问题还是没有理解什么是“指向数组的指针”。 以你的代码中的这一行为例:
temp=p+j;
temp是什么?是一个char型指针!p+j是什么?是一个指向char [20]的指针!两者根本不是同一种类型,怎么能等于呢?就算要等于,也是temp=*(p+j)。
后面的两行
p+j=p+j+1;
p+j+1=temp;
也有同样的问题。当然,后面这两行还有另一个更深入些的问题,就是数组与指针的区别问题,以及等于表达的使用问题。对这个问题我...全部
呵呵,提问者现在不是要用指针数组来解决问题,而是要用数组指针,作为学习,这里面不存在什么“方向性的、极严重的逻辑错误”。就提问者的代码来看,提问者的主要问题还是没有理解什么是“指向数组的指针”。
以你的代码中的这一行为例:
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 收起