1. 程式人生 > >無型別void*指標的幾大特性

無型別void*指標的幾大特性

void型別指標在使用中與其他型別指標不同,在使用中應注意:

1.無型別指標不能對記憶體進行解釋,只能獲得物件地址

int main()
{
	void *p;
	int n=sizeof(*p);
	printf("%d\n", n);
	return 0;
}

當程式編譯到sizeof(*p)時報錯,p不是指向完整型別的指標,也就是說編譯器此時不知道該將p指標解釋為多少個位元組。

2. 無型別指標不能不能自加或自減

  1. void型別的指標為常量,自加或自減勢必要改變自身的值,而指標指向的地址為常量,不可改變。
  2. 編譯器無法解釋無型別指標元素所佔位元組長度,因此自加或自減無法確定指標移動多少個位元組。
  3. 要實現void指標的運算,必須強制轉換為某一完整型別。

3. 無型別指標不能解引用

因為void指標只知道,指向變數/物件的起始地址,但是不知道指向變數/物件的大小(佔幾個位元組)所以無法正確引用

4. 無型別指標可以接受任何指標的賦值

void指標可以指向任何型別的資料地址,因此也稱為通用指標或者泛指針,或者叫做萬能指標,但是得到的只是賦值過來的首地址,void型別仍然限制了對資料的操作。

ok,畫重點!無型別函式在記憶體操作的3個應用:

1.記憶體移動函式 (也可實現記憶體拷貝)
void * memmove(void * _Dst, const void * _Src, size_t _Size);
2.記憶體拷貝函式
void *memcpy(void * _Dst, const void * _Src,size_t _Size);
3.記憶體設定函式
void * memset(void * _Dst, _ int _Val, _ size_t _Size);