标题:这样操作线性表为设么不行???
只看楼主
maemoliu
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-9-17
结帖率:100%
已结贴  问题点数:20 回复次数:2 
这样操作线性表为设么不行???
代码如下:
就是搞不清这个int initlist(sqlist L)和int initlist(sqlist &L)有什么区别???麻烦讲一下。。。谢了
#include<stdio.h>
#include<malloc.h>
#define elemtype int
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
    elemtype *elem;
    int length;
    int listsize;
    }sqlist;
int initlist(sqlist L){
    L.elem =(elemtype *)malloc(LIST_INIT_SIZE*sizeof(elemtype));
    if(!L.elem ) return 0;
    L.length=0;
    L.listsize =LIST_INIT_SIZE;
    return 1;
}
int listinsert(sqlist L,int i,elemtype e){
    int *q,*p;
    if(i<1&&i>L.length +1) return 0;
    if(L.length >=L.listsize ){
        newbase=(elemtype *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(elemtype));
        if(!newbase) return 0;
        L.elem=newbase;
        L.listsize+=LISTINCREMENT;
    }
    q=&L.elem[i-1];
    for(p=&L.elem[L.length-1];p>=q;--p){
        *(p+1)=*p;
    }
    *q=e;
    ++L.length ;
    return 1;
}
void main()
{
    int i,*p,j,a;
    sqlist(L);
    initlist(L);
    scanf("%d",&L.length);
    for(i=0;i<L.length;i++){
        p=&L.elem[i];
        scanf("%d",&p);
    }
    scanf("%d",&j);
    listinsert(L,j,a);
}
应该怎么改啊???
搜索更多相关主题的帖子: 线性 
2010-12-07 00:37
zhangyasong
Rank: 2
等 级:论坛游民
帖 子:4
专家分:36
注 册:2008-12-31
得分:20 
就是搞不清这个int initlist(sqlist L)和int initlist(sqlist &L)有什么区别?

本质上这个问题是一个参数传值还是传地址的问题。当使用int initlist(sqlist L)这种声明的时候,如果你传一个L进去,在函数内部会生成一个L的副本,在函数内部对L的操作实际上是对L的副本的操作,对外面的L没有什么作用,所以不能插入数据。当使用int initlist(sqlist &L)这种声明的时候,传进去的形参是外面L的地址,然后在函数内部用*L进行操作,是对L所指向的地址的内容进行的修改,所以就可以起作用了。
  不知道这样解释,你懂了没有?
2010-12-07 14:40
maemoliu
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-9-17
得分:0 
懂了。。。。谢了啊。。
2010-12-08 00:21



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




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

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