免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1588 | 回复: 2
打印 上一主题 下一主题

[C++] 请教一个C++ “指针”与“引用”的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-11 10:19 |只看该作者 |倒序浏览
typedef char * BYTE_PTR;

int foo( BYTE_PTR &szA )
{
    //.........
}

int main(int argc,char** argv)
{
    int *pA = new char[5];

    // 把int数组按字节来处理

    foo( ( BYTE_PTR )pA );             // 编译通过,执行无误。
    foo( ( BYTE_PTR& )pA );            // 编译通过,执行无误。但是 lint 检查时有异常指针转换的告警。
    return 0 ;
}

请教:1. (char *)  和 (char *&)  在做强制类型转换时有什么区别呀?
              2. 深入一下,强制类型转换时,(TYPE) (TYPE &)

PS:
            我理解(char *&)  就相当于 (char) ,所以 lint 报指针转换异常,对吗?

论坛徽章:
0
2 [报告]
发表于 2008-11-11 12:22 |只看该作者

回复 #1 jediii 的帖子

第一行应该 int *pA = (int *)new char[5];?

PS: 试了一下,foo( ( BYTE_PTR )pA );是错的...A reference that is not to 'const' cannot be bound to a non-lvalue

参数是个临时变量,引用临时变量有误?

用 BYTE_PTR pC = (char *)pA;
foo(pC);
就可以通过

[ 本帖最后由 bert1984 于 2008-11-11 12:43 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-11-11 16:38 |只看该作者

回复 #1 jediii 的帖子

就是类型不一致嘛。(char*&)是指针的引用,与(char)完全不同
TYPE和TYPE&是两个不同的类型。TYPE的对象有自己的存储,而TYPE&必须依附于另一个类型为TYPE的对象存在。
很多编译器用指针实现引用,那倒推回去,就是TYPE和TYPE*的区别了。

[ 本帖最后由 fera 于 2008-11-11 17:57 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP