函數定義混亂,我發現這個函數的定義關於用C
void *func(void *param) {
}
其實,我對本函數定義了一定的混亂。 void *在函數的返回類型以及參數中表示什麼。我是C的初學者,所以請不要介意。謝謝
void *func(void *param) {
int s = (int)param;
....
}
看看上面的程序,我找到了。我認爲它應該是
int *s = (int *)param;
不是嗎?我很困惑
函數定義混亂,我發現這個函數的定義關於用C
void *func(void *param) {
}
其實,我對本函數定義了一定的混亂。 void *在函數的返回類型以及參數中表示什麼。我是C的初學者,所以請不要介意。謝謝
void *func(void *param) {
int s = (int)param;
....
}
看看上面的程序,我找到了。我認爲它應該是
int *s = (int *)param;
不是嗎?我很困惑
void *
意味着它是一個沒有特定類型的指針,把它看作是一個通用指針,不像int *
一個int指針。
如果需要的話,你可以將它轉換成不同的類型(例如,如果你要用指針做指針運算)。
您可能會發現使用這太問題:Concept of void pointer in C programming
它只是意味着該函數func
需要一個參數是一個指針(任何事情),並返回一個指針(任何事情)。當你使用一個void *
時,你告訴編譯器「這是一個指針,但在這一點上它並不重要,它指向什麼」。
當你想要實際使用它指向的數據時,你需要將它轉換爲指向其他類型的指針。舉例來說,如果它指向一個int
,您可以創建一個int *
變量和反引用是:
int *int_ptr = (int *)param;
// now (*int_ptr) is the value param is pointing to
返回任何類型的指針。它可以是任何數據類型。
你可以把它看成是一個原始指針,沒有什麼比一個地址多,想想看,指針無非地址正確的多,所以他們都應該是相同大小的,在最現代化的系統是32位或64位但如果這就是爲什麼我們說int *
或char *
左右,如果他們都是一樣的大小,以及那是因爲我們需要的方式來詮釋我們都指向型,int *
意味着當我們提領去該地址和情況將4個字節解釋爲int
或char *
意味着當我們取消引用到該地址並獲取一個字節時,如果您取消引用void *
,那麼會發生什麼warning: dereferencing ‘void *’ pointer
基本上,我們確實無法做到這一點,如果您的影響是編譯器相關的,當我們做算術時也是如此在上面。
那麼爲什麼要使用它們呢?以及我個人不和某些羣體不特別喜歡他們,他們根本允許你創建相當通用子程序,一個很好的例子是memset
它設置的內存塊的某個字節的值,它的第一個參數是void *
所以不會抱怨是否給出char *
或int *
應注意的是它以每個字節爲基礎工作,並且您需要正確計算數組的總大小。
void *func(void *param) {
}
param是一個void指針,意味着它是任何引用類型的指針。由於void指針沒有對象類型,除非是大小寫,否則不能解除引用。
so void *param;
int *s=(int*)param;
在這裏,因爲一個參數是一個指針變量,所以你會像你一樣有投它作爲一個指針variable.not到整型。
例如
int x;
float r;
void *p=&x;
int main()
{
*(int *)p=2;
p=&r;
*(float*)p=1.1;
}
在這個例子中,p是一個void指針。現在在主要方法中,我將p作爲一個int指針,然後作爲一個浮點指針,以便它可以引用第一個整數,然後是float。
你甚至不需要將它轉換爲不同的類型,它將自己轉換爲任何其他對象指針。 –