+ -
当前位置:首页 → 问答吧 → 指针做为函数形参的一个小问题

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

时间:2011-12-22

来源:互联网

我先把代码简写下。

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

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
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

热门下载

更多