在c中将指向结构的指针传递给函数时出错

问题描述

| 我试图将指向两个“ 0”的指针传递给一个函数,该函数将在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: %ldus\\n\",elapsed);
 }
导致错误的行是对
elapsed
的赋值。我在C中使用结构没有太多经验,更不用说将指向结构的指针传递给函数了,所以我不确定是什么导致了错误。     

解决方法

.
运算符比
*
运算符具有更高的优先级,因此像
*end.tv_sec
这样的表达式尝试首先求值ѭ7which(由于
end
是指针,这是不可能的),然后取消对结果的引用。 您应该改用
(*end).tv_sec
end->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_sec
begin->tv_sec
相同