2014-11-23 53 views
0

什麼是價值語義和參考語義,它們之間有什麼區別?你可以讓我在c中給出一個例子。什麼是價值和參考語義和差異

我猜你在引用語義,你只是發送一個指針到另一個函數,那麼它是引用語義?我發現很難理解語義是什麼價值?如果我只使用一個int作爲參數,然後讓這個函數返回一個int,那麼函數使用值語義?副作用如何影響這一點?必須有其他的價值語義的例子,然後我提到,如果我是對的。你能否給我舉個例子。 如果一個函數將一個指針作爲參數並且函數的返回值是一個int,函數是否同時使用引用和值語義?

+0

[請參閱此處](或http://stackoverflow.com/questions/9940643/benefit-of-passing-an-int-by-reference-vs-by-value)或許 – 2014-11-23 00:09:07

+1

價值語義意味着您訪問副本,而參考語義意味着你訪問實際的東西。引用語義最接近的是將數組傳遞給函數或傳遞指針。 – dasblinkenlight 2014-11-23 00:09:35

回答

1

在參考語義中,參數指的是原始對象,是爲了閱讀或寫作。

在值語義中,參數只是對象的值,即副本而不是原始值。當然,如果你用一些副作用改變這個副本,原始元素保持不變。

由值傳遞的實施例:

int f(int a) /* argument a is passed by value (local variable containing a copy) */ 
{ 
    a++;  /* increments the local variable */ 
    return (a+5); /* return a value */ 
} 

int main (int ac, char**av) { 
    int b=7, c; 
    c = f(b); /* b will be copied. The original value is unchanged */ 
    printf ("b=%d c=%d\n", b, c); /* prints 7 and 13 */ 
} 

通過引用傳遞的實施例:

int fr(int* pa) /* argument pa is a pointer refering to original value */ 
{ 
    *pa+=1;  /* increments value pointed to (the original variable) */ 
    return (*pa+5); /* return by value */ 
} 

int main (int ac, char**av) { 
    int b=7, c; 
    c = fr(&b); /* The original value in b is changed */ 
    printf ("b=%d c=%d\n", b, c); /* prints 8 and 13 */ 
} 

通過引用返回是不太明顯的。 Tt用於例如返回作爲參數接收的參考,或與其相關。或者是對動態分配對象的引用。

+0

你能解釋一下它是如何在c。 C沒有對象。 – user2682811 2014-11-23 00:10:33

+1

C11標準將對象定義爲*「執行環境中的數據存儲區域,其內容可以表示 值」*(第3.15節)。如果你願意,可以把它看作一個變量。 – Christophe 2014-11-23 00:15:41