请教 void * 的作用和用法

yaccpeng 2005-11-18 04:37:32
我最近在读一段程序,它用了很多void *类型,请教各位大虾关于这种类型的作用和用法!(感觉它的作用是,先不确定类型,留作以后赋值时再确定,请大家指教!)

另外,我在linux下的GDB环境中,用p 命令查看一个void *型的变量的时候,提示为:"attempt to dereference a generic a pointer " ,我该怎样才能查看这一类型的变量的内容呢?
...全文
1081 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaccpeng 2005-11-30
  • 打赏
  • 举报
回复
谢谢各位!偶明白了.
echoher 2005-11-20
  • 打赏
  • 举报
回复
void *在C和C++中的用法不一样,建议你看看C++的几本经典书

C++对类型的要求更严,VOID*的使用和C也不同,在这方面C和C++的代码经常不兼容
liubo1977 2005-11-19
  • 打赏
  • 举报
回复
void*功能强大,但有时很危险
Mr_Yang 2005-11-18
  • 打赏
  • 举报
回复
malloc()就是返回一个void类型的指针,在用它分配空间的时候需要进行强制类型转换。
bombwang 2005-11-18
  • 打赏
  • 举报
回复
学习
逸学堂 2005-11-18
  • 打赏
  • 举报
回复
在进行类库设计时,因为
不确定类库的使用者具体使用什么类型的指针。
此时都用void*指针,
而C++的类型转转机制,可以把void*类型指针,转换成为
必须的指针类型。具体转换有编译器实现!
命令查看一个void *型的变量的时候,提示为:"attempt to dereference a generic a pointer " ,我该怎样才能查看这一类型的变量的内容呢?
单独void*变量无法查看起内容,你必须强制类型转换后才可以看到,
比如转换成为int*,或者char*什么的编译器才可以按这种要求解析,
指针地址内的信息。
很简单的一个例子
char *p = "asdfasdf";
int *p1 = (int*)p;
这时候编译器在解析p1的内容时是使用整形解析方法。
cout<<p;
cout<<p1;
打印的结果是
cout<<p正常输出
cout<<p1输出的是一个地址
在编译器查看时,我们也会发现p1指向的是一个字符串类型。
如果我们对
wwo
我们void *p = "asdfas"//编译器会给我们声明为string类型
void *p= 2;
ddmor 2005-11-18
  • 打赏
  • 举报
回复
比如以下代码
int a=1;
void *p=&a;
p++;//错误,编译器都不知道该指针类型,所以不知道该怎么递增地址。
int*pInt=(int*)p;//需要自己指定正确的数据类型,当然一个整型可以当成4个字符,也可以指定首地址为一个字符串指针,当自己要明白,该字符串只有4个字节长度
pInt++;
ddmor 2005-11-18
  • 打赏
  • 举报
回复
对于只需要确定指针首地址位置的应用来说,使用void*是很方便的,比如memset,memcpy,处理的指针内容不需要参考指针类型。将其他指针转换为void*指针后,对编译器来说就无法识别该指针的类型了,需要自己去判断确定。
SereinLi 2005-11-18
  • 打赏
  • 举报
回复
就是定义的时候还不确定其类型,后边使用的时候可以强制转换。
向memset((void *), 0, sizeof());
如果你的第一个参数不是void类型的指针,不需要强制转化也没有问题,因为它相当于兼容了其他所有类型的指针。。。

我该怎样才能查看这一类型的变量的内容呢?

指针在使用前是要先赋值的,要查看其内容只要知道它指向那个变量即可。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧