如何调用C ++函数?

时间:2011-07-04 07:02:35

标签: c++ function

我有一个原型函数

void test( int array [] , int b); 

我知道我们可以将原型重新命名为:void test(int*, int);

main()中,我们声明了以下数组:

int array1[10], array2[10];

将函数体设置为0,

test ( array1 , b)
{
for ( int i = 0 ; i < b ; i++)
  array1[i] = 0;

}

我可以做以下事吗?为什么?

int main()
{// assuming b is the size of the array
test(array1 , b);
test(array2 , b) ;
return 0;
}

我知道c ++的基本知识我试图编写自己的包含文件。 我只是想知道这是否可能,这是一个很好的选择?

4 个答案:

答案 0 :(得分:3)

不能直接回答你的问题,但是你谈论C ++并使用普通的旧C阵列引起了我的注意:

首先考虑不使用C数组。相反,请使用std::vector<int>。这可能避免了首先提出这个问题的需要(它避免了很多其他问题)。您无需担心正确的尺寸类型(intsize_t?还有其他?),因为std::vector已经为您提供了正确的类型:std::vector<int>::size_type

您的功能签名只是

void test( std::vector<int> &a );

用零填充向量的实现将是:

void test( std::vector<int> &a )
{
  std::fill( a.begin(), a.end(), 0 );
}

答案 1 :(得分:1)

是的,这是可能的;但是函数体中的声明应该与声明为原型的声明相同:

void test (int array1[], int b) // <---- see here (prefer `unsigned int` for size)
{
  for ( int i = 0 ; i < b ; i++)
    array1[i] = 0;
}

如果要将某些内容设置为0,最好使用库函数memset()

(作为建议,你可以在现有的基础上建立一个库。否则就像重新发明轮子一样。)

答案 2 :(得分:1)

您可能会询问形式参数与实际参数之间的区别。

在您的原型中

void test(int *array, size_t size);

名称'array'和'size'是形式参数。您可以在函数体内使用这些名称。

在调用函数的代码中,您可以使用不同的名称,这些名称是实际参数。

所以

int main()
{
   const size_t b = 10;
   int array1[10], array2[10];
   test(array1 , b);
   test(array2 , b) ;
   return 0;
}

此处array1b是第一次调用的实际参数,array2b是第二次调用的实际参数。

所以是的,你可以使用你喜欢的任何名字作为实际参数,只要变量的类型与你的原型匹配。

答案 3 :(得分:0)

看起来你正在从C迁移。是的,这是可能的,但你需要正确的声明,否则编译器会抛出错误。

首选的C ++原型是

void test(int *array, size_t size);

在C ++中,您必须声明返回类型以及原型和实现中每个参数的类型。

注意: 您不需要使用size_t,但它是首选(即使在C上)。 size_t中包含stddef.h(扩展名为cstddef,这是首选的C ++包含)。它取决于体系结构,在32位系统中通常是unsigned int,在64位系统上是unsigned long long