2014-03-06 170 views
0
1. struct thread_args 
    { 
2. int thread_id; 
3. struct timeval before; 
4. struct timeval after; 
    } 

5. void * foobar(void *threadargs) 
    { 
6. struct * mydata; 
7. mydata = (struct thread_args *) threadargs; 

8. gettimeofday(&mydata->before, NULL); 
9. gettimeofday(mydata->before, NULL); 
    } 

... 

第8行和第9行有什麼區別?前者編譯,後者不編譯,但即使第一個編譯我不確定它是否按照我的要求編寫。foo-> bar和&foo-> bar有什麼區別?

+0

['gettimeofday'](http://linux.die.net/man/2/gettimeofday)需要一個'struct timeval *'作爲第一個參數,這是否給你一個線索是什麼區別? – Praetorian

+0

我的印象是,&返回指針所指向的變量的地址。我不明白你如何取消引用地址。 –

+0

將運算符('&')的地址應用於類型'T'將返回一個類型爲'T *'的值,其中包含您應用'&'的對象的地址。該值通常用於初始化/分配相同類型的指針變量。只要它指向一個有效的對象,您就可以取消引用該值。 – Praetorian

回答

3

foo->bar =變量bar包含的值在結構變量foo中。

&foo->bar =變量bar的地址在結構變量foo中。

看到這個operator precedence table

gettimeofday()需要struct timeval *類型的第一個參數。所以gettimeofday(mydata->before, NULL);不能編譯。

相關問題