(void*)-1该如何理解

redhumor 2009-05-23 03:08:33
今天看了Linux的一个函数 void *shmat(int shmid,void *addr,int flag)
我想问:
1,函数返回 void的指针类型,那我这个函数的具体实现中,return 语句返回的是什么类型的数据呢? 难道是 return void*(XXX)……
2,void* addr 这个怎么理解,一个指向void类型的指针?感觉好糊涂额,能有专家解释下么
3,这个函数错误时,返回的是(void*)-1这个就更不能理解了…… 这啥意思啊?我还看过(void*)1,(void*)0,这些都是什么用法啊 指教了
...全文
675 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
AldisZhan 2009-05-28
  • 打赏
  • 举报
回复
void * 是可以指向任何类型的指针,任何类型的指针都不需要强制转换就可以赋值给void*指针
void 变量就不一样 他是无类型的 所以只能用在限制 函数返回值 说明无返回值,定义viod变量会导致 编译器无法给他申请多大内存 从而编译出错
返回来 指针都是4个字节的内存镜像 所以就算void× 的指针 编译器也知道申请多大内存给他
但须要注意的是 void指针不能直接赋值给其他指针

介绍下面的实例你就懂 void× 返回值和参数的用法了;

//如果函数的参数可以是任意类型指针,那么应声明其参数为void *

  //典型的如内存操作函数memcpy和memset的函数原型分别为:

  void * memcpy(void *dest, const void *src, size_t len);

  void * memset ( void * buffer, int c, size_t num );

  //这样,任何类型的指针都可以传入memcpy和memset中,这也真实地体现了内存操作函数的意义,
//因为它操作的对象仅仅是一片内存,而不论这片内存是什么类型。如果memcpy和memset的参数类型不是void *,
//而是char *,那才叫真的奇怪了!这样的memcpy和memset明显不是一个“纯粹的,脱离低级趣味的”函数!

redhumor 2009-05-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 points 的回复:]
引用 8 楼 redhumor 的回复:
是不是0xffffffff这个值不能访问到?

这个地址是不能访问的,一般用来判断错
[/Quote]
函数如果是 void *类型的 是不是函数体中的 return 语句 可以写 返回任何类型啊 ?
注册ID真烦 2009-05-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 redhumor 的回复:]
是不是0xffffffff这个值不能访问到?
[/Quote]
这个地址是不能访问的,一般用来判断错
tian428 2009-05-25
  • 打赏
  • 举报
回复
同一编译器中各种指针大小都是一样的,随便转

(void*)-1,(void*)1,(void*)0,都是指针的值
redhumor 2009-05-25
  • 打赏
  • 举报
回复
是不是0xffffffff这个值不能访问到?
redhumor 2009-05-25
  • 打赏
  • 举报
回复
一般好像是只有遇到错误时才会这样处理的额,郁闷 感觉解释的也不清楚额 各位大侠……
qq675927952 2009-05-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bottlebox 的回复:]
-1=0xffff,错误指针里的内容也就如此
[/Quote]

Up
allen303allen 2009-05-23
  • 打赏
  • 举报
回复
貌似有点类似C#中的装箱、拆箱?
瓶盒 2009-05-23
  • 打赏
  • 举报
回复
-1=0xffff,错误指针里的内容也就如此
acdbxzyw 2009-05-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 codecola 的回复:]
1.返回的就是void*,可以转换成任何类型的指针。
2.传进来的参数也是void*,可以传任何类型的指针,只是传进来的时候加一个(void*)。
3.反正就是无类型的指针,没什么复杂的。
[/Quote]

高人。。。
codecola 2009-05-23
  • 打赏
  • 举报
回复
1.返回的就是void*,可以转换成任何类型的指针。
2.传进来的参数也是void*,可以传任何类型的指针,只是传进来的时候加一个(void*)。
3.反正就是无类型的指针,没什么复杂的。

33,021

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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