【问题标题】:any difference between foo(int* arr) and foo(int arr[])?foo(int* arr) 和 foo(int arr[]) 有什么区别?
【发布时间】:2011-07-26 09:28:52
【问题描述】:

有什么区别

foo(int* arr) {}

和

foo(int arr[]){}?

谢谢

【问题讨论】:

标签: c


【解决方案1】:

不,两者没有区别。

【讨论】:

    【解决方案2】:

    C 编译器没有区别。但是对于阅读代码的程序员来说是有区别的。

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

    foo(int* arr) {}
    

    这里,arr 是指向数组中第一个整数的指针(可能用于将数字列表传入和/或传出函数):

    foo(int arr[]) {}
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        您必须取消对第一个值的引用...

        【讨论】:

        • 不。好吧,这取决于,您可以根据需要取消引用第二个:*(array + 3) 与 pointer[3] 相同。
        • 好吧,我有两个函数: int function(int arr[]);整数函数2(整数* arr);为了测试,我有这个数组: int arr[5] = {1,1,1,1,1};在 Visual Studio 2010 中,我可以这样做:function(arr);函数2(arr);即使我没有将动态分配的数组传递给 function2,它仍然允许我这样做。为什么是这样?从做基准测试来看,这两个函数都有相同的结果,所以如果确实发生了取消引用,它可以忽略不计。
        • 你甚至可以为两者都写 1[arr]!
        猜你喜欢
        • 1970-01-01
        • 2021-09-16
        • 2015-01-06
        • 1970-01-01
        • 2010-11-18
        • 2010-12-12
        • 1970-01-01
        • 2015-03-08
        • 2018-07-01
        相关资源
        最近更新 更多