如何调用C++函数

How to invoke C++ function?

本文关键字:C++ 函数 调用 何调用      更新时间:2023-10-16

我有一个函数,原型为

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++ IM 尝试编写自己的包含文件的基本知识。我只是想知道这是否可能,这是一个很好的选择吗?

不是对你的问题的直接回答,但你谈论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 );
}

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

在您的原型中

void test(int *array, size_t size);

名称"数组"和"大小"是形式参数。您可以在函数主体中使用这些名称。

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

所以

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

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

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

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

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((。

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

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

首选C++原型是

void test(int *array, size_t size);

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

注意:你不需要使用 size_t ,但它是首选的(即使在 C 上(。 size_t包含在stddef.h中(以及扩展cstddef这是首选C++包括(。它依赖于体系结构,在 32 位系统中通常是无符号的 int,在 64 位系统上是无符号的长整型