函式中如何返回值

2021-10-03 21:58:14 字數 2679 閱讀 1621

兩個例子

(一)單鏈表定位,並取出該值

#define _crt_secure_no_warnings

#include

#include

#include

typedef

int elemtype;

typedef

struct node

lnode;

//單鏈表

lnode*

initial

(lnode* first,

int n)

;void

display

(lnode* first)

;int

getelem

(lnode* first,

int i, elemtype* e)

;int

main()

else

display

(first)

;return0;

}lnode*

initial

(lnode* first ,

int n)

return first;

}void

display

(lnode* first)

}int

getelem

(lnode* first,

int i, elemtype* e)

while

(p && j < i)if(

!p)else

}

以上為錯誤示例,執行結果為e=0

原因:

elemtype* e = null;

指標e沒有分配儲存空間,而是初始化為0,所以當將e作為實參傳入時,函式中的e=null,*e=p->data時,無法將值傳入儲存空間中帶回

修改方法

1.運用malloc函式進行分配儲存空間

2.進行指標間賦值或取同型別位址賦值

如 e=p(elemtype* p);e=&n(elemtype n)

(二)單鏈表定位,並傳出該位置的位址

#define _crt_secure_no_warnings

#include

#include

#include

typedef

int elemtype;

typedef

struct node

lnode;

//單鏈表

lnode*

initial

(lnode* first,

int n)

;void

display

(lnode* first)

;int

getelem

(lnode* first,

int i, lnode* e)

;int

main()

else

display

(first)

;return0;

}lnode*

initial

(lnode* first ,

int n)

return first;

}void

display

(lnode* first)

}int

getelem

(lnode* first,

int i, lnode* e)

while

(p && j < i)if(

!p)else

}

以上為錯誤示例,執行結果顯示位址為0000000000

原因

1.lnode* e = null;同示例一,沒有分配儲存空間

2.int getelem(lnode* first, int i, lnode* e) ;如果想要帶回該指標位址,應該使用二級指標作為形參

修改方法

1.使用二級指標作為形參,並且給予分配儲存空間

2.直接修改函式型別,函式返回值返回指標位址(更簡單)

以下為第二種方法的正確修改

if

(q ==

getelem

(first, i)

)else

lnode*

getelem

(lnode* first,

int i)

while

(p&& j < i)

return p;

}

總結

1.如果在函式中要返回乙個值,第一可以使用函式的返回值進行返回,第二可以開闢關於該返回值的指標,通過指標傳遞,將值儲存在實參指標傳遞過來的儲存空間中,此時由於儲存空間是在主函式裡開闢的,所以函式結束後釋放其儲存空間的值依然存在。

2.函式通過指標帶回值的方法為:

作為實參將已存在主函式的儲存空間傳入形參(此時形參已指向該儲存空間)等同於指標s=q;然後將需要的值存到到該儲存空間中,即*e=data;於是當函式結束釋放區域性變數時該值依然存在可尋找(注意該儲存空間在主函式開闢,所以不會隨著函式釋放而消失,傳入形參相當於把一把開啟房間的鑰匙複製了一遍)

函式返回值

這裡接著探求被調函式的返回值是如何傳遞到主調函式中的,下面為c程式。add函式通過直接返回a b的,而add1函式先定義乙個區域性變數c,儲存a b的值,然後再返回c的值。其中a b可以當成乙個臨時變數,其結果是暫時存放在暫存器中的 eax 參照反匯程式設計序,可以看出函式的值並不是通過壓棧 基址定...

函式返回值

一般說來,函式中是可以進行區域性變數的返回的,不然豈不是全部要用全域性變數,如果使用了全域性變數,那還有必要進行返回嗎?那函式就沒有它存在的意義了!但是要注意了,這裡所謂的區域性變數的返回很有內涵,什麼樣的值才可以進行返回而不出錯?其實,只要遵守一句話即可 函式不能返回指向棧記憶體的指標!為什麼?因...

函式返回值

現實生活中的場景 我給兒子10塊錢,讓他給我買包菸。這個例子中,10塊錢是我給兒子的,就相當於呼叫函式時傳遞到引數,讓兒子買菸這個事情最終的目標是,讓他把煙給你帶回來然後給你對麼,此時煙就是返回值 開發中的場景 定義了乙個函式,完成了獲取室內溫度,想一想是不是應該把這個結果給呼叫者,只有呼叫者擁有了...