【发布时间】:2021-11-20 12:39:47
【问题描述】:
我试图将数组作为指向函数的指针传递,但是当我这样做时,函数只会将指针视为具有 1 个变量的数组。 这是我的代码:
void make3(int* a) {
int n = sizeof(a) / sizeof(a[0]);
for (int i = 0; i < n; i++) {a[i] = 3;}
}
int main()
{
int a[3] = { 0, 1, 2 };
make3(a);
int* b = a;
for (int i = 0; i < sizeof(a)/sizeof(a[0]); i++) {
cout << *(b + i) << endl;
}
}
函数 make3 仅将数组的第一个值更改为 3,而不是全部更改。 这是正常的吗? 如果没有,我做错了什么?
【问题讨论】:
-
int a[3]是一个数组;。int* a是一个指针。数组将衰减为指针,但无论如何数组不是指针。你做错了什么是你没有使用std::vector。 -
@Eljay 它应该是一个简单的数组,这就是为什么我不能使用向量。不过谢谢!
-
你能解释一下为什么你特别需要将数组作为指针传递,以及为什么你不能将大小作为参数传递吗?
-
指针实际上不是数组。在您的示例中,
make3()仅传递main()传递的数组的第一个元素的地址。该函数在标准 C++ 中无法获取该数组中的元素数。如果您需要获取大小(元素数量),您需要以某种方式传递它(例如作为附加参数),或者正如 Elijay 所说,使用std::vector(这是一个具有成员函数的数据结构,所以你可以获取大小)。如果你不能使用std::vector,必须传递一个指针,但是你不能以某种方式传递大小,没有办法得到大小。 -
许多答案和 cmets 建议
std::vector这是一个很好的替代品。但是对于这些特定的用例(已知的固定大小),还有std::array。
标签: c++