function(int &a){ a = a + 2 } 和 function(int *a){ *a = *a + 2 } 有什么区别

What is the difference between function(int &a){ a = a + 2 } and function(int *a){ *a = *a + 2 }

在 C 中(不是 C++)

有什么区别:

function(int &a)
{
    a = a + 2;
}

和:

function(int *a)
{
    *a = *a + 2; 
}

据我了解,它们是一样的,不是吗?

如有不同,能否举例说明?

int &a 不是 C 标准定义的代码,一般不能在 C 中使用。在 C++ 中,这声明了一个对象的 reference,就像一个指针,但在使用指向的对象时不需要 *,一旦创建就不能更改,并且不能使用空指针。

对于 C++,讨论了指针和引用之间的差异 here。在 C 中,通常不能使用 int &a。 (它可以在某些支持它作为扩展的假设 C 实现中使用,这就是 C++ 的起源。)