int *和int []之间的实际区别是什么?

时间:2012-11-29 22:09:58

标签: c pointers

  

可能重复:
  Is array name a pointer in C?

我将int *变量传递给定义为func(int var[])的函数,并且编译器抱怨从不兼容的指针类型传入参数。有什么区别,或者根本没有区别?

1 个答案:

答案 0 :(得分:2)

所有类型R foo(T[])的函数声明R foo(T *)T都是相同的。

您的错误位于其他地方。

(您可以使用指向foo的指针或使用T数组的名称来调用T,因为后者在指向期间衰减为合适的指针调用。)

示例:

void foo(int *);
void bar(int[]);

void example(int * a)
{
    int n = 10;
    int p[] = { 1, 2, 3 };

    foo(a);     bar(a);
    foo(p);     bar(p);    // all those are OK
    foo(&n);    bar(&n);
}