请教C语言中 (char *)-1)什么意思啊

li32768 2009-04-02 03:56:07
在 C 语言编程中,遇到这种情况,请问这个是什么意思啊,
为什么 mem==(char *)-1) 而后面的字符指针又没有变量名,

我在网上搜索发现不能输入运算符,没有找到的,先谢谢了
...全文
1876 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fianceeyi 2009-04-02
  • 打赏
  • 举报
回复
自学是王道。。。
li32768 2009-04-02
  • 打赏
  • 举报
回复
我自己来回答了
这是一种对常量内存地址表示方法,应用程序有时有这样的需求。这种写法的格式是: (地址类型)地址常量;
//其中常量地址可以用10进制或16进制书写
给举几个例子,比如在在32位系统中:
char* pCh = (char*)-1; // 则pCh为指向char类型的指针,其值为0xffffffff
int* pInt = (int*)2; // 则pInt为指向int类型的指针,其值为0x00000002
float* pFloat = (float*)0x00001a3e; 则pFloat为float类型指针,其指向的地址为0x00001a3e
对于标题中的代码,是这样解释的:
if(mapped_mem == (char *)-1)
{
// 如果映射内存地址(即mapped_mem)为0xffffffff 进行处理
}
else{
// 进行其他处理 }
我想我应该讲清楚了
Paradin 2009-04-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 chenzongquan1973 的回复:]
一般用把-1转换成某种指针来表示错误的指针。if(mem==(char*)-1)一般同检查上一个语句中得到的mem指针是否出错了。
[/Quote]
d
li32768 2009-04-02
  • 打赏
  • 举报
回复
我来回答了:
<P>我自己来回答了:</P>
<P>这是一种对常量内存地址表示方法,应用程序有时有这样的需求。 <BR><BR>这种写法的格式是: (地址类型)地址常量;//其中常量地址可以用10进制或16进制书写 <BR><BR>给你举几个例子,比如在在32位系统中: <BR>char* pCh = (char*)-1; // 则pCh为指向char类型的指针,其值为0xffffffff <BR>int* pInt = (int*)2; // 则pInt为指向int类型的指针,其值为0x00000002 <BR>float* pFloat = (float*)0x00001a3e; // 则pFloat为float类型指针,其指向的地址为0x00001a3e <BR><BR>对于你的标题中的代码,是这样解释的: <BR>if(mapped_mem == (char *)-1){ // 如果映射内存地址(即mapped_mem)为0xffffffff <BR>// 进行处理 <BR><BR>}else{ <BR>// 进行其他处理 <BR><BR>} <BR><BR>我想我应该讲清楚了。</CA> </P>
Cpp权哥 2009-04-02
  • 打赏
  • 举报
回复
一般用把-1转换成某种指针来表示错误的指针。if(mem==(char*)-1)一般同检查上一个语句中得到的mem指针是否出错了。
armed 2009-04-02
  • 打赏
  • 举报
回复
使用(-1)作为指针的好处是:

读写空指针(也就是0地址)“有时”不会引起异常,而在(-1)地址执行读写肯定异常,100%有效。
breezes2008 2009-04-02
  • 打赏
  • 举报
回复
-1的16位二进制表示:1111 1111 1111 1111
此时mem指向0xFFFF这个地址。
影子LEON 2009-04-02
  • 打赏
  • 举报
回复
把-1这个值强制转换成地址。。。
  • 打赏
  • 举报
回复
mem==(char *)-1) 而后面的字符指针又没有变量名

指针-1吧
yyyapple 2009-04-02
  • 打赏
  • 举报
回复
可能表示 mem = 0xFFFFFFFF

70,014

社区成员

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

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