1. 程式人生 > >void type && void pointer(void *,pointer to void type) && Null pointer

void type && void pointer(void *,pointer to void type) && Null pointer

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

在這裡插入圖片描述

Null pointer

拓展延伸