难以将结构传递给函数
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
,因为它有可能与某些系统定义的值(现在或以后)发生冲突。避免命名自己的变量名称,例如 time
、file
、string
等...
我找到了解决方案:
#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)
虽然有很多关于这个问题的话题,但我找不到一个可以解决我的问题,如果我很厚,请见谅。一个重要的区别是我的解决方案不能使用指针。我已经开始了关于结构的章节和我正在处理的问题调用一个函数,该函数接受两个参数 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
,因为它有可能与某些系统定义的值(现在或以后)发生冲突。避免命名自己的变量名称,例如 time
、file
、string
等...
我找到了解决方案:
#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)