什么是价值和参考语义和差异

时间:2014-11-23 00:04:15

标签: c reference return-value semantics

什么是值语义和引用语义,它们之间有什么区别?你能否告诉我一个c中的例子。

我想在引用语义中你只是发送一个指向另一个函数的指针然后它是引用语义?我发现很难理解语义是什么价值?如果我只使用int作为参数然后让该函数从该函数返回一个int,那么函数是否使用值语义?副作用如何影响这个?必须有其他价值语义的例子然后我提到如果我是正确的。你能不能给我一些例子。 如果函数将指针作为参数并且函数返回值是int,那么函数是否使用引用语义和值语义?

1 个答案:

答案 0 :(得分: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用于返回作为参数接收的引用,或者与之相关的引用。或者对动态分配的对象的引用。

相关问题