gpt4 book ai didi

c - 值函数调用中引用函数调用对结构的影响

转载 作者:太空宇宙 更新时间:2023-11-03 23:40:27 25 4
gpt4 key购买 nike

我正在用 C 编程。我通过“按值调用方法”将结构作为参数发送给函数。在函数内部,我调用了另一个需要“通过引用调用”相同结构的函数。按值调用应该复制结构并将此复制版本的指针发送到内部函数。我的问题是,无论我如何发挥内部功能,原始结构,外部功能是否都将保持不变。

此外,按值调用会复制结构。与使用 memcpy 等其他算法手动复制其成员内容相比,这是否非常快?

函数 play 改变值的例子

#include<stdio.h>
#include<stdlib.h>

typedef struct{
int dimension;
double *vector;
}myVector;

void changeVec(myVector *X)
{
X->vector[0]=100;
X->vector[1]=200;
}

void foo(myVector X)
{
changeVec(&X);
}

int main()
{
myVector X;
X.dimension=2;
X.vector=malloc(sizeof(double)*X.dimension);
X.vector[0]=1;
X.vector[1]=2;
printf("before function calling\n");
for(int i=0; i<X.dimension; i++)
{
printf("%f ",X.vector[i]);
}
printf("\n");
foo(X);
printf("after function calling\n");
for(int i=0; i<X.dimension; i++)
{
printf("%f ",X.vector[i]);
}
printf("\n");
return 0;
}

最佳答案

就调用者而言,按值传递给函数的任何内容都保持“完整”。原因是传递的值是调用者提供的参数的 COPY,对 COPY 的任何更改都不会影响原始值。

如果结构包含指针,则可以取消引用该指针。以这种方式所做的任何更改 - 对指针指向的数据 - 将对调用者可见。但是结构本身中指针的值是不能改变的。

编译器在创建结构副本时,通常会选择最有效的复制方式。通过“手动”复制成员来击败它的机会很小。

关于c - 值函数调用中引用函数调用对结构的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47284716/

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