foo(int* arr)和foo(int arr[])有什么不同?

6

这两者之间有什么区别吗?

foo(int* arr) {}

请问foo(int arr[]){} 是什么意思?

谢谢


哇,今天有很多这种类型的问题!! - Sadique
相关但更新的问题:https://dev59.com/-G035IYBdhLWcg3wMM4G - jogojapan
4个回答

12

不,两者之间没有区别。


5

对于C编译器来说,没有任何区别。但是对于阅读代码的程序员来说,有所不同。

在这里,arr是一个整数指针(可能用于从函数中返回结果):

foo(int* arr) {}

这里,arr是指向数组中第一个整数的指针(可能用于在函数内外传递数字列表):
foo(int arr[]) {}

此外,指定函数的返回类型会有所帮助。

1
语义相同,但对于外部程序员来说,更容易和直接理解的是第二个函数将一个数组作为参数。对于第一个函数可能不是那么直接。

-1

你需要将值解引用到第一个...


不是的。这取决于情况,如果你想的话可以对第二个进行解引用:*(array + 3)pointer[3] 是一样的。 - BlackBear
我有两个函数: int function(int arr[]); int function2(int* arr);为了测试,我有这个数组: int arr[5] = {1,1,1,1,1};在Visual Studio 2010中,我可以这样做: function(arr); function2(arr);即使我没有将一个动态分配的数组传递给function2,它仍然允许我这样做。为什么?并且从执行基准测试来看,这两个函数的结果是相同的,因此如果确实发生解除引用,则其可忽略。 - leetNightshade
你甚至可以同时使用1[arr]来表示! - Flexo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接