數據結構 順序表結構的數據結構體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 回答

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語言函數值傳遞"。
添加回答
舉報
0/150
提交
取消