为什么我的函数不修改C中结构中变量的值?

为什么我的函数不修改C中结构中变量的值?,c,struct,C,Struct,这是我的意见。我必须写一个函数,它给我负Zesp.Im struct Zesp { double Re; double Im; }; struct Zesp z1 = { .Re = 5.323 ,.Im= 3.321}; typedef struct Zesp zesp; zesp spZ(zesp z) { z.Im = -(z.Im); return z; } int main ()

这是我的意见。我必须写一个函数,它给我负Zesp.Im

struct Zesp { double Re; 
                    double Im; 
                };
struct Zesp z1 = { .Re = 5.323 ,.Im= 3.321};
typedef struct Zesp zesp;

zesp spZ(zesp z)
{
    z.Im = -(z.Im);
    
    return z;
}

int main ()
{
    spZ(z1);
    printf("%.2f, %.2f\n", z1.Re, z1.Im);
    return 0;
}

我不知道为什么我得到的是3.321而不是-3.321

我编辑我的程序,我的老师说我不能修改函数spZ的参数

我有一个分段错误


#include <stdio.h>

struct Zesp { double Re; 
                    double Im; 
                };
struct Zesp z1 = { .Re = 5.323 ,.Im= 3.321};
typedef struct Zesp zesp;

zesp spZ(zesp z)
{
    z.Im = -(z.Im);
    z = spZ(z);

    return z;
}

int main ()
{
    spZ(z1);
    printf("%.2f, %.2f\n", z1.Re, z1.Im);
    return 0;
}

#包括
结构Zesp{double Re;
双Im;
};
结构Zesp z1={.Re=5.323,.Im=3.321};
类型定义结构Zesp Zesp;
zesp spZ(zesp z)
{
z、 Im=-(z.Im);
z=spZ(z);
返回z;
}
int main()
{
spZ(z1);
printf(“%.2f,%.2f\n”,z1.Re,z1.Im);
返回0;
}

您正在将结构副本传递给函数。它返回一个副本,但您没有使用结果

您需要将函数的结果分配给变量

z1 = spZ(z1);

问题是正在修改此结构的副本。 在您的代码中,此函数返回zest的新实例,该实例的数字应为倒数。因此,您应该保存此函数调用的结果:

z1 = spZ(z1);
或者可以修改参数本身,然后通过指针传递:

void spZ(zesp* z)
{
    z->Im = -(z->Im);
}

通过新的编辑,函数
spZ()
现在是递归的!它在一次又一次地呼唤自己;但是,没有回来。而且,它会耗尽堆栈。但我有一个返回z;在函数的末尾。那么我应该改变什么呢?为什么要添加
z=spZ(z)spZ()
中的code>?语句
spZ(z1)main()
函数中的code>应该是
z1=spZ(z1)。谢谢,现在它清晰易懂了。谢谢你@AzeemSure。不客气!:)快乐编码!祝你好运