亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C語言實現數據結構的兩種聲明結構體的方式有什么區別

C語言實現數據結構的兩種聲明結構體的方式有什么區別

數據結構 順序表結構的數據結構體typedef struct {     ElemType data[MAXSIZE];     int length;}SqList;第一種聲明方式SqList SeqlistInsert(SqList L, int i, ElemType x)第二種聲明方式SqList SeqlistInsert(SqList *L, int i, ElemType x)加星號 " * "和不加*有啥區別,主要是結構體加了* 號如何看這個數據和操作的問題
查看完整描述

2 回答

?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

一個是傳指針一個是傳副本,通常不會傳副本,一是大量占用內存二是對對象修改不靈活。建議你找個c基礎的書開始看。

查看完整回答
反對 回復 2018-10-29
?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

C語言函數傳遞參數是值傳遞,也就是會將實參復制一份,然后再給函數使用。
比如這個函數,

SqList SeqlistInsert(SqList L, int i, ElemType x)
{
...
}

SqList S1;ElemType E1;...
SeqlistInsert(S1, 1, E1);...

S1會被復制一份,然后傳給SeqlistInsert()函數,如果SeqlistInsert()函數嘗試對S1進行修改,比如SeqlistInsert(S1, 1, E1)中有這個語句

S1.length = 3;

這里修改的并不是我們最開始定義的S1(SqList S1;處定義的S1),而是復制后的S1,這么做的結果就是我們沒有辦法修改之前定義的S1。

另一種形式就不一樣了,

SqList SeqlistInsert(SqList *L, int i, ElemType x)
{
...
}

SqList *S1;ElemType E1;...
SeqlistInsert(S1, 1, E1);

這里S1是指在,它的值就是S1所在的內存地址。我們如果想修改S1的值,我們只需要添加

S1->length = 3;

就可以修改之前定義的S1了。因為雖然傳入SeqlistInsert()函數的也是S1的復制體,但它們的值都是S1的內存地址,所以我們可以用這種方式修改S1中元素的值。

如果還有不懂,請百度"C語言函數值傳遞"。


查看完整回答
反對 回復 2018-10-29
  • 2 回答
  • 0 關注
  • 1083 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號