为什么我的函数不修改 C 结构体中变量的值? [英] Why does my function not modify the value of variable in a struct in C?

查看:29
本文介绍了为什么我的函数不修改 C 结构体中变量的值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

struct Zesp { double Re;双我;};struct Zesp z1 = { .Re = 5.323 ,.Im= 3.321};typedef struct Zesp zesp;zesp spZ(zesp z){z.Im = -(z.Im);返回 z;}int主(){spZ(z1);printf("%.2f, %.2f\n", z1.Re, z1.Im);返回0;}

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

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

出现分段错误

<预><代码>#include struct Zesp { double Re;双我;};struct Zesp z1 = { .Re = 5.323 ,.Im= 3.321};typedef struct Zesp zesp;zesp spZ(zesp z){z.Im = -(z.Im);z = spZ(z);返回 z;}int主(){spZ(z1);printf("%.2f, %.2f\n", z1.Re, z1.Im);返回0;}

解决方案

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

您需要将函数的结果赋给变量.

z1 = spZ(z1);

This is my input. I must write a function, which give me minus 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;
}

I don't know why I get 3.321 instead of -3.321?

I edit my program, my teacher said that I can't modify argument of a function spZ.

I get a segmentation fault


#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;
}

解决方案

You're passing a copy of the structure to the function. It returns a copy, but you're not using the result.

You need to assign the result of the function to the variable.

z1 = spZ(z1);

这篇关于为什么我的函数不修改 C 结构体中变量的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆