将LPDWORD作为out参数传递

时间:2013-12-03 15:48:56

标签: c++

我是C ++的新手,我需要创建一个具有这种结构的函数:

BOOL myfunc(LPDWORD myLpdword){ // myLpdword must be an out parameter

    DWORD myDword = 1;
    myLpdword = &myDword;
    return true;

}

int main(){

    DWORD outDword = 20;
    myfunc(&outDword);
    cout << outDword << end1;
    return 0;
}

我预计outDword的值将为1(由myfunc更改),但myfunc不会更改该值。
拜托,你能给我一个解决这个问题的提示吗?

4 个答案:

答案 0 :(得分:2)

喜欢这个

BOOL myfunc(LPDWORD myLpdword){ // myLpdword must be an out parameter
    *myLpdword = 1;
    return true;

}

Out parameter并不代表C ++中的任何东西。 MS使用它,但仅仅是因为他们使用不同语言的一致术语。

在C ++术语中,您所做的是将指针传递给要修改为myfunc的变量。上面的代码所做的是将指针和取消引用*运算符一起修改你想要修改的变量。

我喜欢你正在编写小型测试程序来检查你对C ++的理解。但正如其他人所说,没有真正可以替代一本像样的书。任何C ++书籍都将涵盖这一点。

答案 1 :(得分:0)

你传递了一个指向outDword的指针。

myLpdword现在是指向outDword的指针。

然后您将myLpdword更改为指向myDword的指针。

你从未对outDword的 VALUE 做过任何事情。

答案 2 :(得分:0)

在C ++中,这称为pass-by-reference。您在函数签名中使用&符号表示它:

bool myfunc(DWORD &myDword) {…

您现在使用的&符实际上是获取变量的地址,因此您应该删除它们。

答案 3 :(得分:0)

您指定了退出函数体后不存在的变量的指针(在C / C ++中读取范围。

要解决您的问题,请将变量的值分配给解除引用的指针,如下所示:*myLpdword = myDword;。在解除引用之前检查指针的值是否为空也是明智的:if (myLpdword == 0) { return; }。此检查不保证指针可以安全地分配给,但Atleast会保护您不受空指针访问。