【问题标题】:C++ passing arrays to a method problemC ++将数组传递给方法问题
【发布时间】:2011-01-06 21:55:38
【问题描述】:

嘿,我有这个功能:

void vdCleanTheArray(int (*Gen_Clean)[25])
{

}

我想知道它接受什么样的数组并清除它。

对不起,我对c++有点了解,刚刚有人问我。

谢谢!

【问题讨论】:

  • 我不知道这意味着什么 -> +1,我的第一个猜测是它是一个函数指针数组,但我不认为就是这样。它的有效c tho

标签: c++ arrays methods


【解决方案1】:

它接受一个声明为的数组

int array[25];

应该“通过指针”传递,即通过将& 运算符应用于数组

vdCleanTheArray(&array);

至于如何清理它...据我了解,应该清理它的是上面的函数,你应该写它,对吧?好吧,在函数内部,您可以使用取消引用运算符* 访问数组,如

(*Gen_Clean)[i]

您只需像清除任何其他数组一样“清除”它。取决于您所说的“清晰”是什么意思。用零填充?如果是这样,那么只需编写一个从 0 到 24(或 sizeof *Gen_Clean / sizeof **Gen_Clean)的循环,将每个元素设置为零。

【讨论】:

  • 我认为我的人要我做的是将正在传递的数组清空或为空。
  • 你不能“清空”和数组。 C 风格的数组是“不可空的”。他们有固定的大小。同样,“使数组为空”通常意味着“用零填充它”。最后,如果您需要 deallocate (销毁)数组,则在不知道它是如何分配的情况下无法做到这一点(也不清楚为它编写专用函数的意义何在) .
  • 如果它是动态分配的,那么它就不再是一个 25 个 int 的数组了(这让我想知道为什么有人会使用如此尴尬的方式来传递一些东西,以实现如此“有趣”限制)。
【解决方案2】:

void vdCleanTheArray(int (*Gen_Clean)[25]) 可以描述为“一个函数,它获取一个指向 25 个整数的数组的指针并且什么都不返回。”

假设“清除”是指将所有值设置为 0,您可以这样做:

for (int i = 0; i < 25; i++) {
  (*Gen_Clean)[i] = 0;
}

请注意,在 C++ 中,不能调整 C 样式数组的大小。如果你需要一个可调整大小的数组,最好使用 std::vector,如果你需要一个固定大小的数组,最好使用 std::array。

如果您是 C++ 新手,您可能不应该接触这样的函数。第一个参数的输入方式在 C++ 中不会经常(或应该永远)看到。

对于那些想知道'int (*Gen_Clean)[25]' 语法的人,我相信它是这样输入的,以强制传递的指针实际上指向一个 25 个整数的数组,因为通常 C++ 会降低参数' int *Gen_Clean[25]' 变成指向指针的指针,而不是指向数组的指针。

【讨论】:

    猜你喜欢
    • 2010-10-23
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    相关资源
    最近更新 更多