我對C指針的解引用存在一些疑問。考慮下面的代碼:在前面解除引用(void *)
void *vptr; // declare as a void pointer type
int val = 1;
int *iptr;
// void type can hold any pointer type or reference
iptr = &val;
vptr = iptr;
printf("iptr=%p, vptr=%p\n", (void *)iptr, (void *)vptr);
當我們做(void *)iptr
,什麼是我們實際打印?我認爲,當解引用時,它應該打印數字1,但它實際上打印一個地址。這是爲什麼?爲什麼有必要在前面添加(void *)
以打印地址? iptr
會不夠?
感謝
感謝您的回答。我仍然懷疑我們什麼時候用(void *)來投射哪個值? –
@HommerSmith我寫過它,它以實現定義的方式打印指針的值,因爲C標準爲'p'specifier指定了這種方式。這讓編譯器選擇以「(nil)」或「0x0」打印空指針。通常它會打印一個十六進制的內存地址。請注意,除了類型不同之外,'(void *)iptr'的值與'iptr'的值相同。 – ouah