我是C的新手。有人可以解释一下这些之间的区别吗?
我通常使用这样的指针:
int myFunction(int* something) {
...
}
int main() {
int something;
something = 0;
myFunction(&something);
...
}
但我发现代码看起来像这样:
int myFunction(int& something) {
...
}
int main() {
int something;
something = 0;
myFunction(something);
...
}
对我来说似乎完全一样。有什么不同吗?
答案 0 :(得分:3)
正如您所提到的,int myFunction(int& something) {
不 有效C.这是一个引用,在C++
中使用。
C和C ++ 是不同的语言,尽管语法相似。
如果您要修改something
的内容,则需要将指向它的指针传递给被调用的函数并对指针进行操作。指针本身将通过值传递,但通过在已调用函数内取消指针,可以实现通过引用传递的结果。
所以你的第一个片段是有效的。你应该在C中使用它。
答案 1 :(得分:1)
最显着的区别是“语法糖”。要访问指针something
的内容,您必须输入*something
。对C ++参考something
执行相同操作时,您不需要*
。
更微妙的区别是指针可用于指针算术。例如,要实现库函数strlen
,您可以执行以下操作:
size_t strlen (const char* s)
{
const char* start = s;
while(*s != '\0')
{
s++;
}
return (size_t)(s - start);
}
如果s
是参考,则无法做到这一点。你必须使用单独的计数器等。
请注意, C ++引用在功能上等效于只读指针:
int* const something // C equivalent of a reference