传递指针作为对数组的引用

时间:2014-12-10 05:17:36

标签: c++ arrays

我试图编写一个利用数组长度的模板函数,仅给出参考。我知道以下代码有效

template <unsigned S>
void outputArray(int (&a)[S]) {
    // S = length of array
}

int main() {
    int a[6] = {0};
    outputArray(a);
}

我现在正试图通过使用动态分配的数组来扩展它。我很确定这是不可能的,因为前一种情况下的数组大小是在编译时确定的,但我可能是错的。

void readFile(int*) {
    int a_temp[MAX_DATA]; // MAX_DATA is predefined constant
    int length;

    // a_temp and length assigned from file
    a = new int[length];
    memcpy(a, &a_temp, sizeof(int)*length);
}

template <unsigned S>
void outputArray(int (&a)[S]) {}

int main()  {
    int* a;

    readFile(a);
    outputArray(a); // This is where my problem lies --- Mismatched types
}

当然,不相关的逻辑被截断了。正如您在 readFile 函数中看到的,我正在从文件中读取可变长度数组。但是,我不知道如何使用指针将数组作为类型int [S]传递给 outputArray 函数。

我被限制使用数组(没有C ++向量),因为这是一个家庭作业。如果我绝对没有办法将指针作为类型int [S]传递,那么我将沿着简单地让 readFile 函数返回数组长度值的路线。

1 个答案:

答案 0 :(得分:4)

你做不到。

C风格的数组没有任何关于它们长度的信息,使用C ++类型的结构并不能让你解决这个问题。如果你想要一个知道自己长度的数组,你需要创建自己的数据类型,或者更好,使用标准容器类之一,如std::vector