C 传递为指针
C transmission as a pointer
我是 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);
...
}
这对我来说似乎完全一样。有区别吗?
如您所述,int myFunction(int& something) {
不是 有效的 C。它是一个参考,用于 C++
.
C 和 C++ 是 不同的语言,尽管语法相似。
如果你想修改something
的内容,你需要将指向它的指针传递给被调用的函数并对该指针进行操作。指针本身将按值传递,但是通过在被调用函数内部取消引用指针,可以达到按引用传递的结果。
所以你的第一个片段是有效的。你应该在 C 中使用它。
- 前者是指针,后者有效C。
- 后者是 C++ 参考,不是有效的 C。
最显着的区别是 "syntactic sugar"。要访问指针 something
的内容,您必须键入 *something
。当对 C++ 参考 something
执行相同操作时,您不需要 *
.
一个更细微的区别是指针可以用于指针运算。例如,要实现库函数 strlen
,你可以这样做:
size_t strlen (const char* s)
{
const char* start = s;
while(*s != '[=10=]')
{
s++;
}
return (size_t)(s - start);
}
如果 s
是参考,这是不可能的。您必须使用单独的计数器等
请注意,C++ 引用在功能上 100% 等同于只读指针:
int* const something // C equivalent of a reference
我是 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);
...
}
这对我来说似乎完全一样。有区别吗?
如您所述,int myFunction(int& something) {
不是 有效的 C。它是一个参考,用于 C++
.
C 和 C++ 是 不同的语言,尽管语法相似。
如果你想修改something
的内容,你需要将指向它的指针传递给被调用的函数并对该指针进行操作。指针本身将按值传递,但是通过在被调用函数内部取消引用指针,可以达到按引用传递的结果。
所以你的第一个片段是有效的。你应该在 C 中使用它。
- 前者是指针,后者有效C。
- 后者是 C++ 参考,不是有效的 C。
最显着的区别是 "syntactic sugar"。要访问指针 something
的内容,您必须键入 *something
。当对 C++ 参考 something
执行相同操作时,您不需要 *
.
一个更细微的区别是指针可以用于指针运算。例如,要实现库函数 strlen
,你可以这样做:
size_t strlen (const char* s)
{
const char* start = s;
while(*s != '[=10=]')
{
s++;
}
return (size_t)(s - start);
}
如果 s
是参考,这是不可能的。您必须使用单独的计数器等
请注意,C++ 引用在功能上 100% 等同于只读指针:
int* const something // C equivalent of a reference