C 函式值傳遞和指標傳遞的效率問題

2021-07-11 19:41:34 字數 465 閱讀 5708

c中有兩種傳遞,值傳遞和指標(位址)傳遞。值傳遞需要把資料的乙份拷貝傳遞入函式形參表,並儲存在棧中,函式返回後彈出棧,拷貝被刪除。而指標傳遞則不然。如果形參表是指標,那麼函式在執行時會直接去指標指向的位址中獲取此資料並操作,而不用直接拷貝。看下這個例子:

const

int array_size = 20;

typedef

struct

data;

void fun1(data data)

void fun2(data const *data)

這個結構體佔據的空間很大。如果呼叫fun1,就不得不在棧中儲存乙份很大的拷貝,用後刪除。而fun2卻不用這樣的浪費空間,直接去指向的位址中訪問資料。但是注意,指標傳遞下一切作用效果對源資料有效。所以,對於這樣只讀取不改寫的情況,我們最好選擇後者,並用const修飾指標以增強程式安全性,從而減少空間的浪費。

C 學習014函式值傳遞和位址傳遞

當我們給乙個函式傳引數的時候,可以直接值傳入函式,也給可以把乙個位址傳入函式 區別就是乙個本身不被改變,而另一本身也在改變,在開發時候都會用到,這裡做下記錄 include using namespace std class test void setnum int a int getnum pri...

C 學習014函式值傳遞和位址傳遞

當我們給乙個函式傳引數的時候,可以直接值傳入函式,也給可以把乙個位址傳入函式 區別就是乙個本身不被改變,而另一本身也在改變,在開發時候都會用到,這裡做下記錄 include using namespace std class test void setnum int a int getnum pri...

結構體作為函式引數(值傳遞,引用傳遞,指標傳遞)

一 值傳遞 include include using namespace std struct student void outcome student s 引用傳遞不會進行記憶體重新分配,因此和指標傳參類似,效率很高 void outcome student s 引用傳參 outcome stu...