int * decrementArrayElements(int numbers[], int size){
for (int &x: numbers)
{
x = x-1;
}
return numbers ;
}
正如前面提到的,我尝试通过基于范围的范围将每个数组 ele 的 dec 值减 1
如果我尝试正常的 for 循环,它会起作用
int * decrementArrayElements(int numbers[], int size){
// int n= sizeof(numbers)/sizeof(numbers[0]);
for (int i=0; i<size; i++)
numbers[i]=numbers[i]-1;
return numbers;
}
请解释一下这背后的原因
如果您有一个 C 风格的数组,无论出于何种原因您需要安全地传递给函数,您可以使用函数模板。这允许编译器从其类型推断数组大小。
#include <cstdint>
#include <iostream>
template <std::size_t size>
int * decrementArrayElements(int (&numbers)[size])
{
for (int &x : numbers) --x;
return numbers;
}
int main()
{
int numbers[] = { 1, 2, 3, 4 };
decrementArrayElements(numbers);
for (int x : numbers) std::cout << x;
}
输出:
0123
在这种情况下,返回指针的模式可能没有那么有用。被滥用的可能性更大。我倾向于制作该功能
void
。
您可能需要考虑使用
std::array
来代替,它具有更好的封装性并且(与 C 风格数组不同)具有与其他类型一致的复制语义。
#include <array>
#include <cstdint>
#include <iostream>
template <std::size_t size>
std::array<int, size>& decrementArrayElements(std::array<int, size>& numbers)
{
for (int &x : numbers) --x;
return numbers;
}
int main()
{
std::array<int, 4> numbers = { 1, 2, 3, 4 };
decrementArrayElements(numbers);
for (int x : numbers) std::cout << x;
}