函数原型中的参数

use*_*821 4 c c++ arrays pointers

我的问题是:当我在C中编写函数原型时,如下所示:

void foo(int *vector);
Run Code Online (Sandbox Code Playgroud)

这是一回事:

void foo(int vector[MAX_LENGTH]);
Run Code Online (Sandbox Code Playgroud)

到函数,总是作​​为指针传递?代码是一样的吗?提前致谢.

nmi*_*els 8

这很微妙.C中的数组不是指针,但C不允许将数组作为函数参数传递.所以当你拥有时void foo(int vector[MAX_LENGTH]);,基本上你所做的就是告诉其他程序员(以及你未来的自己),这个函数需要MAX_LENGTH传递一个数组.编译器不会帮助你.它将以静默方式将数组转换为指针.

很好地解释了它.


Pra*_*rav 6

是的,数组类型在传递给函数时会隐式转换为指针类型.

所以

void foo(int *a)并且void foo(int a[])完全相同.

您可以sizeof()在函数定义中轻松检查使用运算符

例如

void foo(int a[])
{
   std::cout<<sizeof(a); //prints sizeof(int*)
}

int main()
{

   int a[]={1,2,3,4};
   foo(a);
}
Run Code Online (Sandbox Code Playgroud)

EXTRA(在函数内打印数组的大小)

[C++ Only]

 template<typename T,size_t n>
 void size_of_array(T (&a)[n]) //Array passed by reference. Template argument deduction 
 {
    std::cout<<sizeof(a); //prints sizeof(n*sizeof(int))
 }

 int main()
 {
      int a[]={1,2,3,4,5};
      size_of_array(a);
 }
Run Code Online (Sandbox Code Playgroud)

  • +1指出sizeof很棘手. (2认同)