在c语言中将指向struct的指针传递给函数时出错



我试图将指向两个struct timevals的指针传递给一个函数,该函数将在C程序中输出两者之间的运行时间。然而,即使我解引用这些指针,nvcc抛出错误"表达式必须具有类类型"(这是一个CUDA程序)。下面是main()中的相关代码:

struct timeval begin, end;
if (tflag) { HostStartTimer(&begin) };
// CUDA Kernel execution
if (tflag) { HostStopTimer(&begin, &end); }

和HostStopTimer()的函数定义:

void HostStopTimer(struct timeval *begin, stuct timeval *end) {
    long elapsed;
    gettimeofday(end, NULL);
    elapsed = ((*end.tv_sec - *begin.tv_sec)*1000000 + *end.tv_usec - *begin.tv_usec);
    printf("Host elapsed time: %ldusn", elapsed);
 }

导致错误的行是对elapsed的赋值。我在C中使用结构体的经验不多,更不用说将指针传递到结构体到函数了,所以我不确定是什么导致了错误。

.操作符具有比*操作符更高的优先级,因此像*end.tv_sec这样的表达式尝试先计算end.tv_sec(这是不可能的,因为end是一个指针),然后解引用结果。

您应该使用(*end).tv_secend->tv_sec

应该写elapsed = (((*end).tv_sec - (*begin).tv_sec)*1000000 + (*end).tv_usec - (*begin).tv_usec);或者使用->运算符

.操作符只能用于结构体,不能用于指向结构体的指针,例如:(*begin).tv_sec而不能用于begin.tv_sec,因为begin是指向结构体的指针。运算符->只是上述操作的"快捷方式",例如(*begin).tv_secbegin->tv_sec相同

相关内容

  • 没有找到相关文章

最新更新