为啥传递给函数的指针的值没有改变? [复制]
Posted
技术标签:
【中文标题】为啥传递给函数的指针的值没有改变? [复制]【英文标题】:Why does not the value of the pointer passed to the function change? [duplicate]为什么传递给函数的指针的值没有改变? [复制] 【发布时间】:2017-05-23 20:50:46 【问题描述】:我将指针作为参数传递给函数。在函数内部我改变了它->它已经改变了。但之后的输出与函数调用之前相同。指针没有改变。怎么了?
void GetFrom(PVOID lpBuffer)
lpBuffer = malloc(12);
memset(lpBuffer, 0, 12);
printf("%p",pointer); // 0000028D46DECE50
PVOID pointer = 0x0;
printf("%p",pointer); // 000000C2628FEFE4
GetFromMap(pointer);
printf("%p",pointer); // 000000C2628FEFE4
在调试中,我看到函数内部指针的值发生了变化。
【问题讨论】:
看看这个答案是否有帮助:***.com/a/4426487/6610379 【参考方案1】:注意lpBuffer = malloc(12)
只是改变了局部变量lpBuffer
的值,但这对传递给GetFrom
的变量没有影响。要更改调用者变量中指针的值,您需要将指针传递给该指针。
void GetFrom(PVOID *lpBuffer)
*lpBuffer = malloc(12);
memset(*lpBuffer, 0, 12);
printf("%p",*lpBuffer); // !=0x0
PVOID pointer = 0x0;
GetFromMap(&pointer);
printf("%p",pointer); // should be != 0x0
顺便说一句:你可以使用calloc
,而不是malloc
和后续的memset to 0
,它隐式地用0
填充分配的内存-
【讨论】:
【参考方案2】:在函数内部我改变了它 -> 它已经改变了。
不完全是:发生变化的“它”是指针的副本,而不是原来传递的指针。
但是在函数调用之前的输出是一样的。指针没有改变。
那是因为你更改了一个副本,而指针却保留了原来的值。
就解决这种情况而言,您在 C 中有一个选项,在 C++ 中有两个选项:
在 C 中,将指针传递给指针。这将使您的函数更改传递给它的指针 在 C++ 中,您还可以传递对指针的引用。这将产生相同的行为,而无需显式使用取消引用运算符。【讨论】:
以上是关于为啥传递给函数的指针的值没有改变? [复制]的主要内容,如果未能解决你的问题,请参考以下文章