繁体   English   中英

对C ++指针和参考主题的困惑

[英]Confusion over C++ pointer and reference topic

C ++中以下参数传递机制之间的区别是什么?

void foo(int &x) 
void foo(int *x)
void foo(int **x)
void foo(int *&x)

我想知道在哪种情况下参数是通过值传递还是通过引用传递。

void foo(int &x)

将引用传递给整数。 这是一个输入/输出参数,可以像函数中的常规整数一样使用。 值被传回给调用者。


void food(int *x)

将指针传递给整数。 这是一个输入/输出参数,但其用法类似于指针,必须取消引用(例如*x = 100; )。 您还需要检查它是否不为空。


void foo(int **x)

将指针传递给指向整数的指针。 这是整数指针类型的输入/输出参数。 如果要更改整数点的值,请使用此值(例如*x = &m_myInt; )。


void foo(int *&x)

将引用传递给指向整数的指针。 像上面一样,但无需取消引用指针变量(例如x = &m_myInt; )。


希望有道理。 我建议使用typedefs来简化指针和引用符号的使用。

只需补充:我认为您的间距会误导您。 如果您进行更改,情况可能会变得更加清晰。

,&,*等是该类型的一部分,因此请保留该类型:

void foo(int& x) 
void foo(int* x)
void foo(int** x)
void foo(int*& x)

int&是对int的引用,int *是对int的指针,int **是对int的指针,依此类推。 您仍然需要从右到左读取类型-int *&是对指向int的指针的引用。 但这是一致的。

我认为这更容易阅读,代表的含义更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM