无类型void*指针的几大特性

版权声明:欢迎转载,注明来源!https://blog.csdn.net/weixin_42572273 https://blog.csdn.net/weixin_42572273/article/details/85262524

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);

猜你喜欢

转载自blog.csdn.net/weixin_42572273/article/details/85262524