[英]C++ passing an array pointer as a function argument
我正在尝试使用数组的指针作为生成数组的函数的参数。
void generateArray(int *a[], int *si){
srand(time(0));
for (int j=0;j<*si;j++)
*a[j]=(0+rand()%9);
} //end generateArray;
int main() {
const int size=5;
int a[size];
generateArray(&a, &size);
return 0;
} //end main
但是当我编译此消息时出现:
cannot convert `int (*)[5]' to `int**' for argument `1' to `void generateArray(int**, int*)'
您太复杂了-它只需要:
void generateArray(int *a, int si)
{
for (int j = 0; j < si; j++)
a[j] = rand() % 9;
}
int main()
{
const int size=5;
int a[size];
generateArray(a, size);
return 0;
}
当您将数组作为参数传递给函数时,它会衰减为指向数组第一个元素的指针。 因此,通常永远不需要将指针传递给数组。
int *a[]
用作函数参数(但不在正常声明中)时,是指向指针的指针,而不是指向数组的指针(在正常声明中,它是指针的数组)。 指向数组的指针如下所示:
int (*aptr)[N]
其中N
是特定的正整数(不是变量)。
如果将函数作为模板,则可以做到这一点,甚至不需要传递数组的大小(因为它是自动推导的):
template<size_t SZ>
void generateArray(int (*aptr)[SZ])
{
for (size_t i=0; i<SZ; ++i)
(*aptr)[i] = rand() % 9;
}
int main()
{
int a[5];
generateArray(&a);
}
您还可以参考:
template<size_t SZ>
void generateArray(int (&arr)[SZ])
{
for (size_t i=0; i<SZ; ++i)
arr[i] = rand() % 9;
}
int main()
{
int a[5];
generateArray(a);
}
您不需要为数组传递指针就可以将其传递给数组生成函数,因为当您将数组传递给函数时,数组已经衰减到了指针 。 只需将参数int a[]
为函数内部的常规数组,即可对您传入的数组进行更改。
void generateArray(int a[], int si) {
srand(time(0));
for (int j=0;j<*si;j++)
a[j]=(0+rand()%9);
}
int main(){
const int size=5;
int a[size];
generateArray(a, size);
return 0;
}
附带说明一下,您不需要通过指针传递大小,因为您无需在函数内部进行更改。 此外,将常量的指针传递给期望指向非常量的指针的参数不是一个好主意。
我猜这会有所帮助。
当作为函数参数传递时,数组的作用与指针相同。 因此,您无需引用它们。 只需键入: int x[]
或int x[a]
。 两种方法都可以。 我猜想,康拉德·鲁道夫(Konrad Rudolf)所说的是一样的话。
This is another method . Passing array as a pointer to the function
void generateArray(int *array, int size) {
srand(time(0));
for (int j=0;j<size;j++)
array[j]=(0+rand()%9);
}
int main(){
const int size=5;
int a[size];
generateArray(a, size);
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.