gpt4 book ai didi

c++ - 将指针作为对数组的引用传递

转载 作者:行者123 更新时间:2023-11-30 01:50:30 27 4
gpt4 key购买 nike

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

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++ vector ),因为这是一项家庭作业。如果我绝对没有办法将指针作为 int [S] 类型传递,那么我将继续简单地让 readFile 函数返回值数组的长度。

最佳答案

你不能那样做。

C 风格的数组不包含有关其长度的信息,使用 C++ 类型构造也无法解决这个问题。如果您想要一个知道自己长度的数组,则需要创建自己的数据类型,或者更好的是,使用标准容器类之一,例如 std::vector

关于c++ - 将指针作为对数组的引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27393784/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com