簡體   English   中英

將指針傳遞給struct到c中的函數時出錯

[英]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_secend->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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM