[英]error when passing pointer to struct to function in c
我正在嘗試將指向兩個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: %ldus\n", elapsed);
}
導致錯誤的行是elapsed
的賦值。 我沒有太多在C中使用結構的經驗,更不用說將結構傳遞給函數的結構,所以我不確定導致錯誤的是什么。
的.
運算符的優先級高於*
運算符,因此像*end.tv_sec
這樣的表達式*end.tv_sec
嘗試計算end.tv_sec
(由於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是指向struct的指針。 operator ->
只是上面的“快捷方式”,例如(*begin).tv_sec
與(*begin).tv_sec
begin->tv_sec
相同
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.