gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:42:57 30 4
gpt4 key购买 nike

什么是值语义和引用语义,它们之间有什么区别?你能给我看一个 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 - 什么是值语义和引用语义及其区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27084007/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com