Ort*_*ios 35 c++ arrays pointers function
我正在尝试使用数组指针作为生成数组的函数的参数.
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
Run Code Online (Sandbox Code Playgroud)
但是当我编译它时,会出现以下消息:
cannot convert `int (*)[5]' to `int**' for argument `1' to `void generateArray(int**, int*)'
Run Code Online (Sandbox Code Playgroud)
Pau*_*l R 70
你过度复杂了 - 它只需要:
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;
}
Run Code Online (Sandbox Code Playgroud)
将数组作为参数传递给函数时,它会衰减到指向数组第一个元素的指针.因此通常不需要将指针传递给数组.
Ben*_*ley 18
int *a[]当用作函数参数(但不在正常声明中)时,是指向指针的指针,而不是指向数组的指针(在正常声明中,它是一个指针数组).指向数组的指针如下所示:
int (*aptr)[N]
Run Code Online (Sandbox Code Playgroud)
哪个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);
}
Run Code Online (Sandbox Code Playgroud)
您也可以参考:
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);
}
Run Code Online (Sandbox Code Playgroud)
您不需要使用指向数组的指针以将其传递给数组生成函数,因为当您将数组传递给函数时,数组已经衰减为指针.只需创建参数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;
}
Run Code Online (Sandbox Code Playgroud)
作为旁注,您不需要通过指针传递大小,因为您没有在函数内部更改它.此外,将指向常量的指针传递给期望指向非常量的参数并不是一个好主意.