指针做为函数形参的一个小问题
时间:2011-12-22
来源:互联网
我先把代码简写下。
C/C++ code
Image是我自己的一个对象,里面有一些成员数据。 我需要用函数装载变量来获取数据。
但是发现,第一个参数 实际上没有正确的返回, 我跟步调试发现在函数类 值都正确的传过来了。
这样我发现根本原因 就是函数返回后第一个参数还是没有正确的保存。
按道理,传入指针就是传入地址,那么就会在我的实参的地址上直接来处理了,为什么还是没有改变,反而搞得像值传递
第二个参数我用引用传递,这个倒是成功的获取到了。
请问一下,为什么会发生这个问题?有什么解决办法没?
貌似是个基础的问题,想这个问题越想脑袋越糊了,表示我弱爆了。
谢各位了。。。。。
C/C++ code
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是我自己的一个对象,里面有一些成员数据。 我需要用函数装载变量来获取数据。
但是发现,第一个参数 实际上没有正确的返回, 我跟步调试发现在函数类 值都正确的传过来了。
这样我发现根本原因 就是函数返回后第一个参数还是没有正确的保存。
按道理,传入指针就是传入地址,那么就会在我的实参的地址上直接来处理了,为什么还是没有改变,反而搞得像值传递
第二个参数我用引用传递,这个倒是成功的获取到了。
请问一下,为什么会发生这个问题?有什么解决办法没?
貌似是个基础的问题,想这个问题越想脑袋越糊了,表示我弱爆了。
谢各位了。。。。。
作者: qjzl2008 发布时间: 2011-12-22
函数参数是传值的,指针也不例外,形参lpbi是函数内部的局部变量,获得的是实参lpbiTest的值的拷贝,修改lpbi的值不会影响实参lpbiTest的值。
修改指针参数的值,用指针的指针。
C/C++ code
修改指针参数的值,用指针的指针。
C/C++ code
void Chage(BITMAPINFO **lpbi,LPSTR &lpbits,CMyImage* image) { GlobalUnlock(image->hdib); *lpbi = (BITMAPINFO *) GlobalLock(image->hdib); lpbits = image->lpbits; }
作者: yulinlang 发布时间: 2011-12-22
琢磨一下这个
C/C++ code
C/C++ code
C/C++ code
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; }
C/C++ code
1,2 1,2 1,2 2,2 请按任意键继续. . .
作者: yisikaipu 发布时间: 2011-12-22
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28