指针做为函数形参的一个小问题

qjzl2008 2011-12-22 07:30:25
我先把代码简写下。


void Chage(BITMAPINFO *lpbi,LPSTR &lpbits,CMyImage* image)
{
GlobalUnlock(image->hdib);
lpbi = (BITMAPINFO *) GlobalLock(image->hdib);
lpbits = image->lpbits; //函数内设断点,这两个变量都是正确获取
}

void main()
{
BITMAPINFO *lpbiTest = NULL;
LPSTR lpbitsTest = NULL;
ChangeFromMyImage(lptest,lpbitstest,Image);
} //函数结束后,lpbiTest还是为NULL,lpbitsTest正确获取。



Image是我自己的一个对象,里面有一些成员数据。 我需要用函数装载变量来获取数据。
但是发现,第一个参数 实际上没有正确的返回, 我跟步调试发现在函数类 值都正确的传过来了。
这样我发现根本原因 就是函数返回后第一个参数还是没有正确的保存。

按道理,传入指针就是传入地址,那么就会在我的实参的地址上直接来处理了,为什么还是没有改变,反而搞得像值传递
第二个参数我用引用传递,这个倒是成功的获取到了。


请问一下,为什么会发生这个问题?有什么解决办法没?


貌似是个基础的问题,想这个问题越想脑袋越糊了,表示我弱爆了。

谢各位了。。。。。
...全文
86 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qjzl2008 2011-12-22
  • 打赏
  • 举报
回复
嗯,谢楼上两位了,问题解决了。 还是用的指向指针的指针。。。。
yisikaipu 2011-12-22
  • 打赏
  • 举报
回复
琢磨一下这个

void func(char *p, char *r)
{
p=r;
}

void hanshu(char **p, char *r)
{
*p=r;
}

int main()
{
char x='1';
char y='2';

char *p=&x;
char *r=&y;

func(p,r);
cout <<x <<',' <<y <<endl;
cout <<*p <<',' <<*r <<endl;

hanshu(&p,r);
cout <<x <<',' <<y <<endl;
cout <<*p <<',' <<*r <<endl;

return 0;
}


1,2
1,2
1,2
2,2
请按任意键继续. . .
yulinlang 2011-12-22
  • 打赏
  • 举报
回复
函数参数是传值的,指针也不例外,形参lpbi是函数内部的局部变量,获得的是实参lpbiTest的值的拷贝,修改lpbi的值不会影响实参lpbiTest的值。
修改指针参数的值,用指针的指针。


void Chage(BITMAPINFO **lpbi,LPSTR &lpbits,CMyImage* image)
{
GlobalUnlock(image->hdib);
*lpbi = (BITMAPINFO *) GlobalLock(image->hdib);
lpbits = image->lpbits;
}

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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