2 回答

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊
一個(gè)是傳指針一個(gè)是傳副本,通常不會(huì)傳副本,一是大量占用內(nèi)存二是對對象修改不靈活。建議你找個(gè)c基礎(chǔ)的書開始看。

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊
C語言函數(shù)傳遞參數(shù)是值傳遞,也就是會(huì)將實(shí)參復(fù)制一份,然后再給函數(shù)使用。
比如這個(gè)函數(shù),
SqList SeqlistInsert(SqList L, int i, ElemType x) { ... } SqList S1;ElemType E1;... SeqlistInsert(S1, 1, E1);...
S1會(huì)被復(fù)制一份,然后傳給SeqlistInsert()函數(shù),如果SeqlistInsert()函數(shù)嘗試對S1進(jìn)行修改,比如SeqlistInsert(S1, 1, E1)中有這個(gè)語句
S1.length = 3;
這里修改的并不是我們最開始定義的S1(SqList S1;處定義的S1),而是復(fù)制后的S1,這么做的結(jié)果就是我們沒有辦法修改之前定義的S1。
另一種形式就不一樣了,
SqList SeqlistInsert(SqList *L, int i, ElemType x) { ... } SqList *S1;ElemType E1;... SeqlistInsert(S1, 1, E1);
這里S1是指在,它的值就是S1所在的內(nèi)存地址。我們?nèi)绻胄薷腟1的值,我們只需要添加
S1->length = 3;
就可以修改之前定義的S1了。因?yàn)殡m然傳入SeqlistInsert()函數(shù)的也是S1的復(fù)制體,但它們的值都是S1的內(nèi)存地址,所以我們可以用這種方式修改S1中元素的值。
如果還有不懂,請百度"C語言函數(shù)值傳遞"。
添加回答
舉報(bào)