我是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不会更改该值。
拜托,你能给我一个解决这个问题的提示吗?
答案 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会保护您不受空指针访问。