什麼是價值語義和參考語義,它們之間有什麼區別?你可以讓我在c中給出一個例子。什麼是價值和參考語義和差異
我猜你在引用語義,你只是發送一個指針到另一個函數,那麼它是引用語義?我發現很難理解語義是什麼價值?如果我只使用一個int作爲參數,然後讓這個函數返回一個int,那麼函數使用值語義?副作用如何影響這一點?必須有其他的價值語義的例子,然後我提到,如果我是對的。你能否給我舉個例子。 如果一個函數將一個指針作爲參數並且函數的返回值是一個int,函數是否同時使用引用和值語義?
什麼是價值語義和參考語義,它們之間有什麼區別?你可以讓我在c中給出一個例子。什麼是價值和參考語義和差異
我猜你在引用語義,你只是發送一個指針到另一個函數,那麼它是引用語義?我發現很難理解語義是什麼價值?如果我只使用一個int作爲參數,然後讓這個函數返回一個int,那麼函數使用值語義?副作用如何影響這一點?必須有其他的價值語義的例子,然後我提到,如果我是對的。你能否給我舉個例子。 如果一個函數將一個指針作爲參數並且函數的返回值是一個int,函數是否同時使用引用和值語義?
在參考語義中,參數指的是原始對象,是爲了閱讀或寫作。
在值語義中,參數只是對象的值,即副本而不是原始值。當然,如果你用一些副作用改變這個副本,原始元素保持不變。
由值傳遞的實施例:
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用於例如返回作爲參數接收的參考,或與其相關。或者是對動態分配對象的引用。
你能解釋一下它是如何在c。 C沒有對象。 – user2682811 2014-11-23 00:10:33
C11標準將對象定義爲*「執行環境中的數據存儲區域,其內容可以表示 值」*(第3.15節)。如果你願意,可以把它看作一個變量。 – Christophe 2014-11-23 00:15:41
[請參閱此處](或http://stackoverflow.com/questions/9940643/benefit-of-passing-an-int-by-reference-vs-by-value)或許 – 2014-11-23 00:09:07
價值語義意味着您訪問副本,而參考語義意味着你訪問實際的東西。引用語義最接近的是將數組傳遞給函數或傳遞指針。 – dasblinkenlight 2014-11-23 00:09:35