将数组作为指针传递

时间:2012-09-02 21:57:29

标签: c arrays pointers parameters

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

以下是我的数组的定义:

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

3 个答案:

答案 0 :(得分: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''声明语法在使用时匹配语法'的说明。

请注意,我从const参数中删除了int。它并非完全没有意义,但如果调用函数修改了参数,则调用函数中没有被调用函数的危险。

答案 1 :(得分:3)

只需使函数成为指针:

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

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

答案 2 :(得分:1)

将数组名称作为数组衰减传递给指针。

传递为:

New_Values(u, v, q);

和函数原型:

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