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
  • 如果你对Q.3的回答是错误的,那么C++中有没有作为引用的调用呢?看起来指针仍然是按值传递的,但我们现在将
    ptr
    的内容(指向
    newint(1)
    )存储在另一个变量中。这是因为在这种情况下,ptr被复制了,就好像我们在Q.1中遇到了这种情况,但整数值恰好是一个内存地址
  • 当控件位于
    foo()内部时,
    a==ptr&&a==1
  • 对。参数
    a
    来自参数
    *ptr
    ,其值将与
    *ptr
    相同,即
    1

  • 当控件位于
    bar()
    内时,是否为
    b==ptr
  • 对。参数
    b
    来自参数
    ptr
    ,其值将与
    ptr
    相同

  • 当控件位于
    bar()
    内时,是否为
    &b==&ptr
  • 不,它们是独立的对象,有不同的地址

    如果你对Q.3的回答是错误的,那么在C++中有什么东西可以作为引用吗? 对。您可以将其更改为通过引用传递

    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答案已修订。