标题:数据结构,指针交换的问题
只看楼主
lc5491137
Rank: 2
等 级:论坛游民
帖 子:37
专家分:70
注 册:2012-3-5
结帖率:100%
已结贴  问题点数:50 回复次数:7 
数据结构,指针交换的问题
#include<stdio.h>
#include<string.h>
void add(struct book *fb, int count);
#define MAXTITL 40
#define MAXAUTL 40
#define MAXBKS 10

struct book{
     char title[MAXTITL];
     char author[MAXAUTL];
     float value;
};
int main(void)
{
     struct book library[MAXBKS];
     int count=0;
     int index;

     printf("Please enter the book title.\n");
     printf("Press [enter] at the start of a line to stop.\n");
     while(count < MAXBKS && gets(library[count].title)!=NULL && library[count].title[0] !='\0')
     {
          printf("Now enter the author.\n");
          gets(library[count].author);
          printf("Now enter the value.\n");
          scanf("%f", &library[count++].value);
          while(getchar() !='\n')
               continue;
          if(count <MAXBKS)
               printf("Enter the next title.\n");
     }
     if(count>0)
     {
          printf("Here is the list of your books: \n");
          for(index=0; index<count; index++)
            {
                 add(&library[0], count);
                 printf("%s by %s: $%.2f\n", library[index].title, library[index].author, library[index].value);
            }
     }
     else
          printf("No books? Too bad.\n");
     return 0;
}


void add(struct book *fb ,int count)
{
     struct book *temp;
     int a, b;
     for(a=0; a<count-1; a++)
          for(b=a+1; b<count; b++)
               if(strcmp((fb+a)->title, (fb+b)->title)>0)
               {
                    temp=fb+a;
                    (fb+a)=(fb+b);
                    (fb+b)=temp;
                  }
}
为什么最后这样的
(fb+a)=(fb+b);
(fb+b)=temp;指针交换是错误的
搜索更多相关主题的帖子: include 交换 library void title 
2012-06-03 20:02
jokerskill
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:392
专家分:554
注 册:2012-3-4
得分:7 
代码太多了,晕
2012-06-03 20:04
摘星星的猴
Rank: 2
来 自:浙江
等 级:论坛游民
帖 子:14
专家分:23
注 册:2010-9-30
得分:7 
回复 楼主 lc5491137
我推测你所想要完成的功能可以这样实现。
       *temp= *(fb + b);
     *(fb+b) = *(fb + a);
     *(fb+a) = *temp;
2012-06-03 21:22
lc5491137
Rank: 2
等 级:论坛游民
帖 子:37
专家分:70
注 册:2012-3-5
得分:0 
回复 3楼 摘星星的猴
谢谢,你写的是整个数据结构的交换,这个我知道的,现在就是不明白为什么我上面那样的指针交换为什么不行。
2012-06-03 21:26
真的很菜
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:94
专家分:151
注 册:2012-2-18
得分:7 
因为struct book *temp;这个指针没有初始化,它的值是不确定的
2012-06-03 23:51
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
得分:7 
(fb+a)->title 从这里可以看出fb+a是指针,
但是fb+a这个并不是个左值,当然不能被赋值,同样fb+b也不是左值!
若要达到你上面的目的,你可以交换a,b的值。
2012-06-04 12:29
lc5491137
Rank: 2
等 级:论坛游民
帖 子:37
专家分:70
注 册:2012-3-5
得分:0 
回复 6楼 demonleer
不是很明白,既然fb+a是指针为什么不能作为左值呢?
2012-06-04 16:06
angel丶诗
Rank: 2
等 级:论坛游民
帖 子:13
专家分:36
注 册:2012-6-2
得分:7 
表达式最后一般都会产生一个不可变的值 最终整个表达式代表一个结果值 不可变  所以不能作为左值
2012-06-04 18:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-370736-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.128258 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved