我有一个带有值的集合,我想指定一个指针指向集合中的一个项目。
以下是一个不起作用的类似示例:
void changeVar(int * var) {
int newInteger = 99;
var = &newInteger;
}
int main() {
// create a random pointer and initialize to NULL
int * randomPointer= 0;
// the printf prints out it's address as 0. good.
printf("address: %d \n\r", randomPointer);
// pass the pointer to a function which should change where the pointer points
changeVar(randomPointer);
// the printf below should print the value of the newInteger and randomPointer should point to newInteger value address
printf("value: %d \n\r", *randomPointer);
return 0;
}
如何在changeVar函数之后,randomPointer指向newInteger的地址?
PS。 randomPointer
必须是指针
答案 0 :(得分:2)
要使对var
的更改传播回调用者,您需要通过指针传递var
:
void changeVar(int** var) {
(*var) = ...;
}
也就是说,newInteger
在changeVar
返回的时刻超出了范围,所以在此之后你不应该继续指向它。取消引用这样的指针将导致undefined behaviour。
答案 1 :(得分:1)
您需要将引用(指向指针的指针)传递给您的函数。通过这种方式,您可以告诉功能"更改此位置的值"。
void changeVar(int **pp){
static int n=99;
*p = &n;
}
注意 - 您需要static
,因为一旦您离开该功能,内存位置将无效。现在用
changeValue(&randomPointer);