2011-10-17 34 views
2

這是我的代碼看起來像一個例子:「從不同大小的整數轉換爲指針」是什麼意思?

void *a = NULL; 
void *b = //something; 
a = (void *)(*((char *)b + 4)); 

是(B + 4)指向的值是,我想在一個存儲地址。當我嘗試編譯時,我得到「警告:從不同大小的整數轉換爲指針」。這是什麼意思,我應該怎麼做才能解決它?

編輯:爲了澄清,我不想'a'指向比'b'大4個字節的地址。在我的程序中,我知道存儲在((char *)b + 4)中的值本身就是另一個指針,我想將這個指針存儲在'a'中。

回答

2

這是一個char*

(char *)b + 4 

這意味着,這樣的:

*((char *)b + 4) 

char。然後你繼續將char轉換爲void*,編譯器會抱怨。您不必手動轉換爲void*用C所以只是這應該做的:

a = (char *)b + 4; 

更新徵求意見:聽起來你在這之後是:

a = *(char **)((char *)b + 4) 
+0

謝謝您的澄清。現在我明白我做了什麼,但是我的目標不是指向比'b'大4個字節的地址。在我的程序中,我知道存儲在((char *)b +4)中的值本身就是另一個指針,我想將此指針存儲在'a'中。 – David

+0

@David:請看我的更新,如果我瞭解你,我認爲你就是這樣。 –

+1

是的,謝謝!我假設(char **)意味着它是一個指針指針?我對C仍然很陌生,所以處理指針會讓我感到困惑。 – David

0

聽起來像:你的指針有問題。

在這種情況下,重新審視你的表情:是真的你得到的char地址?

(void *)(*((char *)b + 4)); 

所以

(char *)b 

是一個指向char,因爲是

(char *)b+4 

但隨後*((char *)b+4)被提領(char *)b+4,這樣的類型char - 然後你想將該東西(可能是1個字節)轉換爲4或8字節的地址。 Ergo,尺寸不匹配。

0

它會提高可讀性,如果你分開陳述 我爲你做了這個並得到:

char *c = (char *)b; 
char *d = c + 4; 
a = (void *) 
     (*d); // <- this is c char and you want to cast it to a pointer 

好像你寫了一個星號太多

0
void *a = NULL; 
char jig[10]="jigarkumar"; 
void *b = jig; 
printf("b is %p",b); 
a = (void *)(((char *)b + 4)); 
printf("\na is %p",a); 

問題是在這裏

a = (void *)(*((char *)b + 4)); 
      ^
      | 

這個*獲取存儲在B + 4點的地址&它分配給它的值是錯誤的 如此只是刪除該&您的代碼將正常工作

相關問題