Dr.*_*ula 9 c++ arrays arguments
egr*_*nin 25
我可以像使用int和bool这样的原语一样将数组传递给函数吗?
是的,但只使用指针(即:通过引用).
我可以按值传递它们吗?
不可以.您可以创建支持该类的类,但普通数组不支持.
该函数如何知道它传递的数组的大小?
它没有.这是使用诸如vector<T>代替之类的东西的理由T *.
澄清
函数可以获取指向特定大小的数组的引用或指针:
void func(char (*p)[13])
{
for (int n = 0; n < 13; ++n)
printf("%c", (*p)[n]);
}
int main()
{
char a[13] = "hello, world";
func(&a);
char b[5] = "oops";
// next line won't compile
// func(&b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
不过,我很确定这不是OP所期待的.
Ara*_*raK 14
您可以按照C的常规方式传递数组(数组衰减到指针),或者您可以通过引用传递它们,但它们不能通过值传递.对于第二种方法,它们随身携带:
template <std::size_t size>
void fun( int (&arr)[size] )
{
for(std::size_t i = 0; i < size; ++i) /* do something with arr[i] */ ;
}
Run Code Online (Sandbox Code Playgroud)
大多数情况下,std::vector除非您需要特定的本机数组,否则使用标准库中的其他序列会更加优雅.
我可以像处理 int 和 bool 等基元那样将数组传递给函数吗?
是的你可以。将数组名称作为参数传递给函数会传递第一个元素的地址。
简而言之:
void foo(int a[]);
Run Code Online (Sandbox Code Playgroud)
相当于
void foo(int * a);
Run Code Online (Sandbox Code Playgroud)
我可以按值传递它们吗?
并不真地。与数组名称一起传递的“值”是第一个元素的地址。
传递 C 样式数组副本的唯一方法是将其包装在实现深复制语义的classor中。struct
函数如何知道它传递的数组的大小?
它不会,除非你的函数接受一个额外的参数,即数组的大小。
您可以std::vector按值传递类似的精心设计的对象(尽管这种情况相当罕见)。通常,您通过引用或 const 引用传递。
AC/C++ 数组,如
void foo(int x[])
Run Code Online (Sandbox Code Playgroud)
始终通过引用传递。此外,该函数无法确定调用者传入的参数的真实大小,您必须假设一个大小(或将其作为单独的参数传递)。
| 归档时间: |
|
| 查看次数: |
15610 次 |
| 最近记录: |