关于* 和 & 的问题

pumasun 2010-02-21 11:44:56
今天抄了一段关于GDIPlus的代码,其中有一段代码让我很迷惑。有一个函数如下定义。
inline Image*
Image::FromStream(
IN IStream* stream,
IN BOOL useEmbeddedColorManagement
)
{
return new Image(
stream,
useEmbeddedColorManagement
);
}
引用函数的时候是这样是使用的
Image * &pImg;
pImg = Gdiplus::Image::FromStream(pStream);

我很想知道inline Image* 和 Image* &pImag的定义的含义。到底是指针还是指针的指针?希望各位高手指点
...全文
75 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
pumasun 2010-02-21
  • 打赏
  • 举报
回复
明白了,这么简单的东西竟然没搞清楚,真是谢谢各位的帮忙,呵呵
Icedmilk 2010-02-21
  • 打赏
  • 举报
回复
引用 6 楼 pumasun 的回复:
引用 4 楼 icedmilk 的回复:pImg就是个普通的指针这就没什么问题了

但是在函数参数定义中去掉 & 就会出现内存读错误呢


刚才没看到 那个pImg是在参数列表里的

在参数列表里对阵类型加了&

作用是让pImg的更改在函数外面生效

说白了
LoadImageFromID这个函数的pImg参数是用来做返回结果的

zhiweikongfu 2010-02-21
  • 打赏
  • 举报
回复
Image * &pImg;
pImg = Gdiplus::Image::FromStream(pStream);

这样应该编译不过吧,
写成:
Image * &pImg = Gdiplus::Image::FromStream(pStream);
应该可以吧, Image* &pImg 是Image指针的引用。学习一下c++的引用和指针的区别就知道了吧。
pumasun 2010-02-21
  • 打赏
  • 举报
回复
引用 4 楼 icedmilk 的回复:
pImg就是个普通的指针
这就没什么问题了


但是在函数参数定义中去掉 & 就会出现内存读错误呢
pumasun 2010-02-21
  • 打赏
  • 举报
回复
刚开始的时候发的代码有问题,刚才更正了一下。呵呵。抱歉啊
Icedmilk 2010-02-21
  • 打赏
  • 举报
回复
pImg就是个普通的指针
这就没什么问题了
Icedmilk 2010-02-21
  • 打赏
  • 举报
回复
这段代码有问题

pImg 是一个 Image* 类型的引用

FromStream返回的是一个 Image* 类型

他将引用指向了 一个返回值

我觉得是不行的
pumasun 2010-02-21
  • 打赏
  • 举报
回复
BOOL CMyClockDlg::LoadImageFromID(UINT nID,LPCTSTR sTR,Image* &pImg)
{
......
pImg=Gdiplus::Image::FromStream(pstm);//使用GDIPLUS从流中加载图片
.....
}
调用的是这个样子的,刚才发帖没发对,抱歉。这样编译时通过的。也就是说 inline Image* 中的Image*是返回类型了?
yxwsbobo 2010-02-21
  • 打赏
  • 举报
回复
inline Image*

定义函数的时候使用inline会变成内联函数,其作用类似于宏,对代码本身逻辑并没有影响



Image* &pImag 估计编译不通过,首先他是个引用,引用必须初始化的时候赋值

它的意思是 一个引用,引用的是 Image 类型的指针

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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