首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是值语义和引用语义及其区别

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

Stack Overflow用户
提问于 2014-11-23 08:04:15
回答 1查看 5.3K关注 0票数 8

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

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

EN

回答 1

Stack Overflow用户

发布于 2014-11-23 08:08:38

在指称语义中,论元指的是原始对象,是用于读取或用于写入的对象。

在值语义中,参数只是对象的值,即副本而不是原始对象。当然,如果更改此副本会产生一些副作用,原始元素将保持不变。

传值示例:

代码语言:javascript
复制
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 */
}

引用传递示例:

代码语言:javascript
复制
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用于返回作为参数接收的引用,或与其相关的引用。或对动态分配的对象的引用。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27084007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档