将结构传递给函数的难度

时间:2015-02-25 21:02:10

标签: c struct

虽然在这个问题上有很多线索,但我找不到解决我问题的问题,如果我很厚,就道歉。一个重要的区别是我的解决方案不能使用指针。我已经开始了关于结构和我正在处理的问题的章节,这个函数需要一个带有两个参数t1和t2的函数,这两个参数在结构框架中是两个不同的时间。我已经尽可能地减少了代码,并且发现我的struct items的值没有通过函数。

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

4 个答案:

答案 0 :(得分:2)

你从未调用过你的函数

elapsedTime( t1, t2 );

答案 1 :(得分:2)

你在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;
}

一种更常见的方式来回归&#34;笨重的&#34;数据项将作为指针:

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 = ...;

    ...
}

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

答案 2 :(得分:0)

我找到了一个解决方案:

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

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

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

希望这可以在您使用指针时提供帮助。

答案 3 :(得分:0)

所描述的行为很可能是通过使用相同名称的参数隐藏全局变量t1和t2引起的。 (代码中还有其他问题,其他人已经介绍过。)

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

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

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