难以将结构传递给函数

Difficulty passing struct to a function

虽然有很多关于这个问题的话题,但我找不到一个可以解决我的问题,如果我很厚,请见谅。一个重要的区别是我的解决方案不能使用指针。我已经开始了关于结构的章节和我正在处理的问题调用一个函数,该函数接受两个参数 t1 和 t2,这两个参数在结构的框架中是两个不同的时间。我尽可能地减少了代码,并且发现我的结构项的值没有通过函数。

#include<stdio.h>

struct time
{
    int hour;
    int minute;
    int second;
};

struct time t1 = {3, 45, 15};
struct time t2 = {9, 44, 03};

int main (void)
{
    struct time elapsedTime(struct time t1,struct time t2);

    return 0;
}

struct time elapsedTime(struct time t1,struct time t2)
{
    printf ("%i:%i:%i\n", t1.hour, t1.minute, t1.second);
    printf ("%i:%i:%i\n", t2.hour, t2.minute, t2.second);

    return;
}

您从未调用过您的函数

elapsedTime( t1, t2 );

您在 main 中声明了函数,但没有调用它。

而不是:

int main (void)
{
    struct time elapsedTime(struct time t1,struct time t2);

    return 0;
}

你需要:

struct time elapsedTime(struct time t1,struct time t2);

int main (void)
{
    struct time mt = elapsedTime(t1, t2);

    // Do something with mt...

    return 0;
}

return "bulky" 数据项的更常见方式是作为指针:

typedef struct my_time {
    int hour;
    int minute;
    int second;
} my_time_t;

void elapsedTime(my_time_t t1, my_time_t t2, my_time_t *t3)
{
    t3->hour = ...;
    t3->minute = ...;
    t3->second = ...;

    ...
}

注意:我强烈建议避免为您的 struct 使用通用的通用名称,例如 time,因为它有可能与某些系统定义的值(现在或以后)发生冲突。避免命名自己的变量名称,例如 timefilestring 等...

我找到了解决方案:

#include<stdio.h>

struct time
{
  int hour;
  int minute;
  int second;
};

void elapsedTime(struct time t1, struct time t2)
{
  printf("%i:%i:%i\n", t1.hour, t1.minute, t1.second);
  printf("%i:%i:%i\n", t2.hour, t2.minute, t2.second);
}

int main()
{
  struct time t1 = { 3, 45, 15 };
  struct time t2 = { 9, 44, 03 };
  elapsedTime(t1, t2);
  return 0;
}

编译为我的预期结果。

正如其他人所说,您只需 elapsedTime(t1, t2);.

即可调用该函数

编辑:

要获得您在下面的评论中所说的内容,您可以使用以下概念:

struct time
{
  int hour;
  int minute;
  int second;
};

void elapsedTime(struct time t1, struct time t2, struct time *t3)
{
  printf("%i:%i:%i\n", t1.hour, t1.minute, t1.second);
  printf("%i:%i:%i\n", t2.hour, t2.minute, t2.second);
  t3->hour = 100;
  t3->minute = 50;
  t3->second = 25;
}

int main()
{
  struct time t1 = { 3, 45, 15 };
  struct time t2 = { 9, 44, 03 };
  struct time t3 = { 0, 0, 0 };

  elapsedTime(t1, t2, &t3);
  printf("%i:%i:%i\n", t3.hour, t3.minute, t3.second);
  return 0;
}

如您所见,我将第三个结构传递给函数,并通过函数中的引用更改结构值。 (值在函数外更改)

然后我在函数外打印结构来检查它是否有效。

希望这对您可以使用指针有所帮助。

所描述的行为很可能是由于隐藏了具有相同名称参数的全局变量 t1 和 t2 引起的。 (其他人已经涵盖了所写代码的其他问题)。

我会更改参数名称,例如:

struct time t1 = {3, 45, 15};
struct time t2 = {9, 44, 03};

struct time elapsedTime(struct time time1,struct time time2)