2014-01-15 50 views
0

有人可以解釋爲什麼*(int*) a的工作原理?*(int *)a - 有人可以解釋

還有在另一個文件如何:在這裏(any.h

#ifndef ANY_H 
#define ANY_H 

typedef void * any; 

#endif 

代碼是在另一個文件test.c其中any.h包括

int abcd(any j) { 
    k = ((struct a*)j)->b[0]; 
} 

的作品?對於struct這是否意味着,j是指針?有點困惑。

+1

我認爲在你的問題中'*(int *)'有點混亂,因爲你的例子是一個結構指針強制轉換,然後使用' - >'而不是'*'來獲得指向信息。無論誰寫了「任何」字,都讓每個人都變得更加艱難。 – RichardPlunkett

+0

你可以寫兩行'int * xp = x;'(其中x是一個void poiner),而不是'*(int *)'指向int和'* xp'的是int * – Brandin

+0

'*(int *)',這個例子是兩個不同的東西,這就是爲什麼我寫了「和另一個文件」應該讓我自己更清楚:)。謝謝你們的幫助! – user3196556

回答

2

*(int*)a應該爲您提供a指向的位置的內容,而將a視爲指向整數的指針。如果a已經是指向整數的指針,則*(int*)a相當於*a。括號內的內容是一個演員操作符。

any現在相當於void *,或者是一個不涉及任何特定值類型的泛型指針。 void *通常用於不希望指定指針指向的位置,但只是標識內存中的位置(不考慮其內容)。要獲得void指針所指向的值,首先需要將其轉換爲指向特定類型的指針,這是(struct a*)j所做的:將j視爲指向struct a的指針。

1

當你輸入(int*)等它是一個cast。這告訴編譯器「想象」那種類型的東西。

因此,你是鑄造(告訴編譯器)在j是指向一些結構一個在該行((struct a*)j)

可能只會增加,如果j是不是這種類型的,你可能有奇怪的錯誤運行。