爱问知识人 爱问教育 医院库

一道C语言程序的郁闷

首页

一道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++);
}

提交回答
好评回答
  • 2019-02-26 08:24:07
      呵呵,提问者现在不是要用指针数组来解决问题,而是要用数组指针,作为学习,这里面不存在什么“方向性的、极严重的逻辑错误”。就提问者的代码来看,提问者的主要问题还是没有理解什么是“指向数组的指针”。以你的代码中的这一行为例:
    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

    S***

    2019-02-26 08:24:07

其他答案

    2019-02-26 09:19:36
  • 呵呵,高手如云,敬佩敬佩!

    不***

    2019-02-26 09:19:36

  • 2019-02-26 08:55:17
  • 因为j是整形变量,p是执指针变量,所以类型当然不匹配了。
    你这样写试试
    *temp=*p+j;
    *p+j=p+j+1;
    *p+j+1=*temp;
     
    好久没用C++了,  不知道我的回答对不对。
    

    淡***

    2019-02-26 08:55:17

  • 2019-02-26 08:46:19
  • 你不仅是语法错了,而且逻辑也错了(方向性的,极严重)。
    你可能是希望借助指针的值的交换避免字符串内容的交换,这样可以提高效率,但这样需要为每个字符数组提高一个指针,从你的代码来看,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
    		                
    		            

    卢***

    2019-02-26 08:46:19

  • 2019-02-26 08:27:47
  • 程序中的*p++应改为*(p++),否则相当于(*p)++了

    冲***

    2019-02-26 08:27:47

类似问题

换一换

相关推荐

正在加载...

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 176-195
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):