2011-03-30 246 views

回答

10

不,两者没有区别。

-1

你将不得不取消引用值第一个...

+0

我.......认为 – 2011-03-30 20:19:09

+0

nope。这取决于你,如果你愿意,你可以解引用第二个:'*(array + 3)'和'pointer [3]'是一样的。 – BlackBear 2011-03-30 20:21:36

+0

那么,我有两个函数: 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 2011-03-30 20:26:24

1

语义是相同的,但对于外部编程,它更容易和直接的理解:第二个函数接受一个数组作为参数。它不可能像第一个那样直接。

3

C编译器没有区别。尽管如此,读取代码的程序员却有所不同。

这里,ARR是指向一个整数(可能用于从函数返回的结果):

foo(int* arr) {} 

这里,ARR是一个指向第一个整数数组中的(可能是用于使列表在功能中和/或在功能外):

foo(int arr[]) {} 

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

相关问题