void type && void pointer(void *,pointer to void type) && Null pointer
阿新 • • 發佈:2018-12-19
void type
void pointer(void *,pointer to void type)
1 ANSI C和C ++支援void指標或void *作為通用指標型別。 指向void的指標可以儲存任何物件(不是函式)的地址,並且在C中,在指定時隱式轉換為任何其他物件指標型別,但如果取消引用則必須顯式轉換。
int x = 4; void* p1 = &x; int* p2 = p1; // void* implicitly converted to int*: valid C, but not C++ int a = *p2; int b = *(int*)p1; // when dereferencing inline, there is no implicit conversion
2 無法對void指標執行指標運算,因為void型別沒有大小,因此無法新增指向的地址,儘管gcc和其他編譯器將對void *執行位元組演算法作為非標準擴充套件,將其視為 這是char *.
void *p;
int main(int argc, char **argv)
{
printf("p= %p\n",p);
p++;
printf("p++= %p\n",p);
return 0;
}
3 C ++不允許將void *隱式轉換為其他指標型別,即使在賦值中也是如此。
int x = 4; void* p1 = &x; int* p2 = p1; // this fails in C++: there is no implicit conversion from void* int* p3 = (int*)p1; // C-style cast int* p4 = static_cast<int*>(p1); // C++ cast