2016-03-04 33 views
-4

爲什麼這段代碼使用& (*p)[i]如何使用void *?

typedef void* sir; 
int main(){ 

    sir *p;  
    int x[10],i;  
    for(i = 0;i < 10;i++) 
     x[i] = i; 
    p = &x; 
    for(i = 0;i < 10;i++) 
     printf("%d ",&(*p)[i]); 
    return 0; 
} 
+0

什麼是'sir'的定義是什麼? – MikeCAT

+2

@MikeCAT'typedef void sir' ...糟糕的格式 –

+2

然後'p'的類型爲'void **'。 – MikeCAT

回答

2

你Typedef的sirvoid *,所以當你寫sir *p,您聲明pvoid**型,雙無效pointer.Try,而不是申報psir p,並打印的元素陣列,使用以下:

#include <stdio.h> 
#include <stdlib.h> 

typedef void* sir; 

int main(void) 
{ 
    sir p; 
    int x[10], i; 
    for (i = 0; i < 10; i++) 
     x[i] = i; 
    p = &x; 
    for (i = 0; i < 10; i++) 
     printf("%d ", *((int *)p + i)); 
    return 0; 
} 

注:void指針不能在沒有適當的類型,int在這case.Also指針運算鑄解引用上不允許空指針。

要打印的數組,而不是內容本身的元素的地址,使用:

for (i = 0; i < 10; i++) { 
    printf("%p\n", (void *)((int *)p + i)); 
} 
+0

不要使用'%x'來打印地址,或者調用*未定義的行爲*。使用'%p'並投射地址以打印到'void *'。 – MikeCAT

相關問題