如何调用C++函数
How to invoke 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++ IM 尝试编写自己的包含文件的基本知识。我只是想知道这是否可能,这是一个很好的选择吗?
不是对你的问题的直接回答,但你谈论C++但使用普通的旧 C 数组这一事实引起了我的注意:
首先考虑不使用 C 数组。请改用std::vector<int>
.这可能避免了首先提出这个问题的需要(并且避免了许多其他问题(。您无需为正确的尺寸类型(int
? size_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;
}
这里array1
和b
是第一次调用的实际参数,array2
和b
是第二次调用的实际参数。
所以是的,你可以使用任何你喜欢的名字作为实际参数,只要变量的类型与你的原型匹配。
是的,这是可能的;但是函数体中的声明应该与您声明为原型的声明相同:
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 位系统上是无符号的长整型
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗