0

我有一个函数需要一个固定大小的数组。数组的内容将在此函数中修改,因此我想将数组作为指针传递。

这是我的数组的定义:

int u[] = {1, 0 , a};   //a is an integer
int v[] = {1, 0 , a};   //a is an integer

这是我的原型:

void New_Values(int* u[3], int* v[3], const int q);

这是我的函数调用:

New_Values(&u, &v, q);   //q is an integer

我得到编译器错误:

从不兼容的指针类型传递“New_Values”的参数 1

从不兼容的指针类型传递“New_Values”的参数 2

4

3 回答 3

4

只有在特殊情况下,您才需要将指向数组的指针传递给函数;您很可能会按照其他人的建议进行操作:

void New_Values(int u[], int v[], int q);
void New_Values(int *u,  int *v,  int q);

(这些声明是等价的;编译器将前者视为像后者一样编写,因此您通常会看到简单的指针表示法而不是数组表示法。)

和电话:

New_Values(u, v, q);

如果你真的想使用指向数组的指针,你必须使用正确的符号——你试图指定的是一个整数指针数组,而不是一个指向整数数组的指针。

void New_Values(int (*v)[], int (*v)[], int q);

和电话:

New_Values(&u, &v, q);

在里面New_Values(),你会使用:

(*v)[i] = (*u)[j] + q;

这是 C 的“使用时声明语法匹配语法”的说明。

请注意,我constint参数中删除了。这并非完全没有意义,但是如果调用函数确实修改了参数,则调用函数不会修改调用函数中的值。

于 2012-09-02T22:06:20.430 回答
3

只需让函数获取指针:

void New_Values(int *u, int *v, const int q);

并且像数组一样使用它们。在这种情况下,数组衰减为指向第一个元素的指针。此外,您应该从函数调用中删除,&然后说:New_Values(u, v, q);

于 2012-09-02T21:59:06.533 回答
1

只需将数组名称传递为数组衰减为指针。

传递为:

New_Values(u, v, q);

和函数原型:

void New_Values(int* u, int* v, const int q);
于 2012-09-02T22:00:16.867 回答