1

这些签名有什么区别?


T * f(T & identifier);
T & f(T & identifier);
T f(T & identifier);

void f(T * identifier); void f(T & identifier); void f(T identifier);

我在 c 中遇到了指针,但函数签名中的符号对我来说是新的。任何人都可以解释一下吗?

4

2 回答 2

2

类型声明中的 & 符号表示引用类型。

int i = 4;
int& refi = i;  // reference to i
int* ptri = &i; // pointer to i

refi = 6;  // modifies original 'i', no explicit dereferencing necessary
*ptri = 6; // modifies through the pointer

引用与指针有许多相似之处,但如果不需要地址算术,它们更易于使用且不易出错。此外,与指针不同,引用不能在初始化后重新“指向”另一个对象。只需向谷歌询问 C++ 中的参考与指针即可。

于 2010-04-05T12:37:48.747 回答
1

T * f(T & identifier);
这是一个函数,它接受对 T 的引用并返回指向 T 的指针。

T & f(T & identifier);
这是一个函数,它接受对 T 的引用并返回对 T 的引用。

T f(T & identifier);
这个引用一个 T 并返回一个 T 的副本。

void f(T * identifier);
这个接受一个指向 T 的指针并且什么都不返回。

void f(T & identifier);
这个引用一个 T 并且什么都不返回。

void f(T identifier);
这个按值(副本)取一个 T 并且不返回任何内容。

引用的行为几乎与指针完全一样,只是永远不会将引用设置为 NULL,并且会为您隐式创建和取消引用,因此您无需在调用函数或在函数内部处理指针语法。

于 2010-04-05T12:37:58.917 回答