| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2789 人关注过本帖
标题:A.length与A->length有区别吗?
只看楼主 加入收藏
hcanhong
Rank: 1
来 自:肇庆学院网络工程系
等 级:新手上路
帖 子:58
专家分:0
注 册:2008-9-6
收藏
 问题点数:0 回复次数:6 
A.length与A->length有区别吗?
//设A=(a1,a2...,an)和B=(b1,b2...,bn)均为顺序表,比较A与B大小
#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define OVERFLOW 0
#define LEN sizeof(Sqlist)

typedef struct {
    char elem[LIST_INIT_SIZE];
    int length;
    int listsize;
}Sqlist;

void InitList_Sq(Sqlist **L) {
    /*构造一个空的线性表*/
    *L=(Sqlist*)malloc(LEN);
    if (!*L) exit(OVERFLOW);
    (*L)->length = 0;
    (*L)->listsize = LIST_INIT_SIZE;
} /*InitList_Sq*/



void Comparison_Sq(Sqlist *A, Sqlist *B) {
    int i = 0;
   
     while( i < A->length  && i < B->length )
    {
    if( A->elem[i] < B->elem[i] )
    {
        printf("A < B\n");
        return ;
    }
   else if( A->elem[i] > B->elem[i] )
    {
        printf("A > B\n");
        return ;
    }
    else
    {
        i ++;
    }
    }
    if(A->length < B->length )
    {
        printf("A < B\n");
        return ;
    }
    else if ( A->length > B->length )
    {
        printf("A > B");
        return ;
    }
    else
    {
        printf("A == B");
        return ;
    }
}

void main()
{
    Sqlist *A=NULL,*B=NULL;
    int i=0, j=0;
    char flag;

    InitList_Sq(&A); //构造空表A
    InitList_Sq(&B); //构造空表B
    printf("请输入A的字母序列:\n");
    while(scanf("%c",&flag),A->listsize>= i) {
        if (flag == '\n') break;
        else {
                A->elem[i]=flag;  
                flag = NULL;
                A->length++;
                i++;
             }
        }
    printf("请输入B的字母序列:\n");
    while(scanf("%c",&flag),B->listsize>=j) {
        if (flag == '\n') break;
        else {
            B->elem[j]=flag;
            flag = NULL;
            B->length++;
            j++;} }
    /*比较:*/
    Comparison_Sq(A,B);
    free(A); /*释放A*/
    free(B); /*释放B*/
   
}
以上是我同学发给我的程序,他原来所有的->符号都是.的,但编译器则认为是错误的:如在while( i < A->length  && i < B->length )
    {
    if( A->elem[i] < B->elem[i] )
    {
        printf("A < B\n");
        return ;
    }
改为:while( i < A.length  && i < B.length )
    {
    if( A.elem[i] < B.elem[i] )
    {
        printf("A < B\n");
        return ;
    }
vc编译器则提示:
error C2228: left of '.length' must have class/struct/union type
D:\My Documents\My QQ Files\2.12.cpp(28) : error C2228: left of '.length' must have class/struct/union type
D:\My Documents\My QQ Files\2.12.cpp(28) : fatal error C1903: unable to recover from previous error(s); stopping compilation
Error executing cl.exe.
于是我就想到A.length与A->length有区别吗?在谭浩强的c中的第269页则说:
1、结构体变量.成员名;
2、(*p).成员名
3、p->成员名
是等价的;可为什么在这个程序中却又区别呢????
难道真的有区别?如果有,区别有是什么??
在这里,小弟虚心向各位大侠请教咯~
谢谢~
搜索更多相关主题的帖子: length 
2008-09-12 13:15
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-09-12 13:30
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
收藏
得分:0 
A->a   相当于 (*A).a
2008-09-12 15:48
josen0205
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:307
专家分:52
注 册:2007-5-8
收藏
得分:0 
这位同学,你解释的已经很清楚了。你都知道
1、结构体变量.成员名;
2、(*p).成员名
3、p->成员名
是等价

那么程序中你定义的是Sqlist *A
(*A).length和A->length是等价的

当你写成A.length肯定就是错误的,'.'是通过对象访问其成员,‘->’是通过对象指针访问其成员。

只有想不到,没有做不到
2008-09-12 15:49
hcanhong
Rank: 1
来 自:肇庆学院网络工程系
等 级:新手上路
帖 子:58
专家分:0
注 册:2008-9-6
收藏
得分:0 
[bo][un]josen0205[/un] 在 2008-9-12 15:49 的发言:[/bo]

这位同学,你解释的已经很清楚了。你都知道
1、结构体变量.成员名;
2、(*p).成员名
3、p->成员名
是等价

那么程序中你定义的是Sqlist *A
(*A).length和A->length是等价的

当你写成A.length肯定就是错误的 ...




谢谢~~我是莱鸟,初遇到一些小问题还是不是很懂~~
2008-09-12 23:38
yt414204458
Rank: 2
等 级:论坛游民
帖 子:260
专家分:55
注 册:2008-3-1
收藏
得分:0 
有区别的,具体我也忘了,不过结构体变量.成员名;应用的范围是最广的

一切从爱C开始
2008-09-12 23:54
p1s
Rank: 4
等 级:贵宾
威 望:10
帖 子:454
专家分:3
注 册:2005-11-4
收藏
得分:0 
用.的是对象或结构体变量或他们的引用
用->是对象或结构体的指针
2008-09-13 10:54
快速回复:A.length与A->length有区别吗?
数据加载中...
 
   



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

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