指针也存在“传值”和“传址”的操作。下面用一小段测试代码及结果来进行说明:
bool GetValue(int* var) { int b = 10; var = &b; return true; } int main() { int* a = nullptr; GetValue(a); return 0; }
以上是测试代码,下面是运行结果:
在还没运行GetValue(a);
函数的时候,可以看出,a
是nullptr
类型。
运行进去之后,可以看到GetValue()
函数的形参var
有地址,且值为10
。
但是,运行出来之后,可以看到,a
的值与运行GetValue()
函数之前一样。也就是说,GetValue()
函数并没有改变指针a
的值。在这里,可以将int*
看成是一种普通数据结构(就像int
那样),所以也就可以将这个传参过程看作是传值了。所以,如果要传址,那么也应该加一个引用。如下所示:
bool GetValue(int*& var) { int b = 10; var = &b; return true; } int main() { int* a = nullptr; GetValue(a); return 0; }
修改后的运行结果如下图所示: