void*和void類型

|   版權聲明:本文爲博主原創文章,未經博主容許不得轉載。函數

 

  void的類型是無類型的數據,void*表示無類型的指針。其中void*能夠指向任何數據類型的指針。spa

  void類型的用法:指針

  (1)、void類型不能直接聲明變量,由於對於一個無類型的變量,編譯器是不知道要爲這個數據分配多少個內存單元,以下:blog

int main(void)
{
	void a;     //錯誤
	return 0;
}

  若是存在上面例子中的語句的話,編譯器將報錯,以下圖:內存

 

  (2)、void的類型做爲函數的返回值時,代表該函數不須要返回數據給函數的調用處。原型

 

  (3)、void*聲明的變量能夠指向任何類型的指針,以下:編譯器

int main(void)
{
	void *a;
	void *b;
	int value1 = 5;
	char value2 = 'm';

	int *c = &value1;
	char *d = &value2;
	
	a = c;
	b = &d;

	cout << "void *a: " << a << endl;
	cout << "void *c: " << c << endl;
	cout << "void *b: " << b << endl;
	cout << "void *d: " << static_cast<void*>(&d) << endl;

	return 0;
}

  以下圖所示:void*變量指向的地址和複製變量的地址一致,說明voi*指針指向了特定的內存單元。編譯

  可是,void*能夠指向任何類型的指針,可是其餘類型的指針卻不能夠指向void*類型,以下:這是由於類型不一致,int*不能轉換成void*類型,其餘的也同樣(char*,int*等類型都不能相互轉換,要轉換的話必須進行強制類型的轉換)ast

int main(void)
{
	void *a;
	int* value1;
	value1 = a;   //錯誤
	return 0;
}

  

  

  (4)、數據類型的封裝,以下:class

  void* test(void* a, void*b);

  C++中的memcpy函數和memset函數,memmove函數等函數都是。以下函數原型:

  

  在這些函數的形式參數值爲void*類型,它能夠接受任何的數據類型的參數傳遞進來。

 

---------若有錯誤,但願你們多多指正---------

相關文章
相關標籤/搜索