什么是值和引用语义以及区别

use*_*811 7 c reference return-value semantics

什么是值语义和引用语义,它们之间有什么区别?你能用c中的例子给我看看吗?

我猜在引用语义中,你只是发送一个指向另一个函数的指针,然后它是引用语义?我发现很难理解什么是值语义?如果我只使用 int 作为参数,然后假设从该函数返回一个 int,那么该函数使用值语义?副作用如何影响这一点?肯定还有其他值语义的例子,然后我提到了我是否正确。你能给我举个例子吗?如果函数将指针作为参数并且函数返回值是 int,那么该函数是否同时使用了引用语义和值语义?

Chr*_*phe 7

在引用语义中,参数指的是原始对象,用于读取或写入。

在值语义中,参数只是对象的值,即副本而不是原始值。当然,如果你用一些副作用改变这个副本,原始元素保持不变。

按值传递的示例:

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 */
}
Run Code Online (Sandbox Code Playgroud)

通过引用传递的示例:

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 */
}
Run Code Online (Sandbox Code Playgroud)

通过引用返回不太明显。例如,Tt 用于返回作为参数接收的引用或与之相关的引用。或对动态分配对象的引用。

  • C11 标准将对象定义为*“执行环境中的数据存储区域,其内容可以表示值”*(第 3.15 节)。如果您愿意,可以将其视为一个变量。 (4认同)