C++ 指针在C++;?
考虑以下函数定义:C++ 指针在C++;?,c++,pointers,pass-by-value,C++,Pointers,Pass By Value,考虑以下函数定义: intfoo(inta); 整数条(整数*b); int main() { int*ptr=新的int(1); foo(*ptr); 酒吧(ptr); } 我需要帮助澄清我的一些困惑 当控件位于foo()内部时,a==ptr&&a==1 当控件位于bar()内时,是否为b==ptr 当控件位于bar()内时,是否为&b==&ptr 如果你对Q.3的回答是错误的,那么C++中有没有作为引用的调用呢?看起来指针仍然是按值传递的,但我们现在将ptr的内容(指向newint(1))
intfoo(inta);
整数条(整数*b);
int main()
{
int*ptr=新的int(1);
foo(*ptr);
酒吧(ptr);
}
我需要帮助澄清我的一些困惑
foo()内部时,a==ptr&&a==1
bar()
内时,是否为b==ptr
bar()
内时,是否为&b==&ptr
ptr
的内容(指向newint(1)
)存储在另一个变量中。这是因为在这种情况下,ptr被复制了,就好像我们在Q.1中遇到了这种情况,但整数值恰好是一个内存地址
foo()内部时,a==ptr&&a==1
a
来自参数*ptr
,其值将与*ptr
相同,即1
bar()
内时,是否为b==ptr
b
来自参数ptr
,其值将与ptr
相同
bar()
内时,是否为&b==&ptr
int bar(int *&b);
然后参数b
将绑定到参数ptr
,它是ptr
的别名;然后&b==&ptr
为真
最后,
是C++中的值传递的指针?< /P> 是的,它们是通过值本身传递的。逻辑与您注意到的
foo
相同
编辑
您能否评论一下
class_name*&b
在任何情况下是否有用
与通过引用传递其他非指针类型一样,如果您想要修改函数中的指针本身(而不是指针对象),那么它非常有用。e、 g
int bar(int *&b) {
b = ...; // make b pointing to anything else
// the orginal pointer argument being passed gets changed too
}
除非使用引用说明符
&
,否则所有内容都是按值传递的
在bar
的情况下,变量ptr
本身的值被复制到局部参数变量b
中。由于对b
(如b=some_other_指针
)的此类更改仅在栏
函数中进行,因此变量ptr
不会更改
您可以使用指针来模拟按引用传递,这在C中很常用
例如,如果我们做了
*b=5,则在条内
这将改变*ptr
的值&*b==&*ptr
,这是一种通过引用的形式,您是否会评论类名*&b
在任何情况下是否有用?@TwaritWaikar答案已修订。