【问题标题】:Why does my function not modify the value of variable in a struct in C?为什么我的函数不修改 C 结构中变量的值?
【发布时间】:2020-05-11 09:47:27
【问题描述】:

这是我的意见。我必须写一个函数,它给我减去 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;
}

【问题讨论】:

  • 通过您的新编辑,函数spZ() 现在是递归了!它一次又一次地呼唤自己;但是,不回来。而且,它会耗尽堆栈。
  • 但是我有一个返回 z;在函数的最后。那么我应该改变什么?
  • 为什么要在函数spZ()中添加z = spZ(z);main() 函数中的声明 spZ(z1); 应该是 z1 = spZ(z1);
  • 谢谢,现在很清楚很容易。谢谢@Azeem
  • 当然。别客气! :) 编码快乐!祝你好运!

标签: c struct


【解决方案1】:

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

你需要将函数的结果赋给变量。

z1 = spZ(z1);

【讨论】:

    【解决方案2】:

    问题是这个结构的副本正在被修改。 在您的代码中,此函数返回应该反转此数字的新 zest 实例。所以,你应该保存这个函数调用的结果:

    z1 = spZ(z1);
    

    或者你可以修改参数本身,然后你应该通过指针传递它:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      相关资源
      最近更新 更多