首页 > 编程知识 正文

结构体赋值给结构体,sqlist和linklist有什么区别

时间:2023-05-05 19:25:58 阅读:160528 作者:4830

结构体Sqlist L和Sqlist L的差异Sqlist L只能在c中使用; 这里表示的是参照的意思,而c中只表示取地址,所以在c中,将以下顺序表插入函数中的l实际上是原来的结构体

证明Sqlist L是k:

OOLlistinsert(seqlistL,int i,ElemType e ) if ) I1||il.Length1)返回false; if(L.Length=L.Maxsize ) return false; for(intj=L.Length; j=i; j--; l.data[j]=l.data[j-1]; L.length; L.data[i]=e; printf(%p(n ),l ); //L取地址打印return true; 证明了取ListInsert函数的l为地址,比较原结构体的地址

int main () {SeqList k; int i=0,e=0; k.data=(elemtype* ) malloc ) sizeof ) elemtype ) *InitSize ); k.MaxSize=20; while(I!=15 ) {k.data[i]=i; printf(%d(t ),k.data[i]; I; (}k.length=i; 打印(% p (n ),k ); //原始结构地址printf (pleaseinputthenumberandthepositionthatyouwanttoinsert :n ' ); scanf('%d%d ),I,e ); if () listinsert(k,I,e ) )==true ) (printf ) ) itissucceedandtheresultis : (n ) ); for(intj=0; jk.length; j ) printf('%dt ',k.data[j]; 打印(% p (n ),k ); //插入操作后的原始结构地址}else{printf(sorry,insert is false! 呃! ' ); (free ) k.data; 返回0; }运行结果

可知在插入前插入后函数中的l地址也是相同的,证书l为结构体k

证明Sqlist L与原始结构不同,但具有返回功能。

对ListInsert函数做一些更改

OOLlistinsert(seqlistL,int i,ElemType e ) if ) I1||il.Length1)返回false; if(L.Length=L.Maxsize ) return false; for(intj=L.Length; j=i; j--; l.data[j]=l.data[j-1]; L.length; L.data[i]=e; printf(%p(n ),l ); //打印l地址for(intJ=0; jL.length; j )//打印l数据printf('%dt”,L.data[j] ); 返回真; }运行结果

结构体k的地址在插入前后没有变化,与此相对,函数ListInsert的参数的结构体l地址与k不同,可知保证面Sqlist L是与原结构体相同的结构体。

以该形式进行结构体的修改、插入等操作时,结构体的数据量较多时,计算机的开销会增加。

结论:点赞记得收藏

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。