2012-09-02 115 views
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

+0

阅读[comp.lang.c常见问题](http://www.c-faq.com)的第6部分。 –

回答

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的的说明 '的声明语法使用时匹配的语法'。

请注意,我从int参数中删除了const。它并不完全没有意义,但如果修改参数,被调用的函数在调用函数中不会修改其值。

3

只要使函数取指针:

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

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

1

只需将数组名称作为数组衰减传递到指针即可。

通行证为:

New_Values(u, v, q); 

和函数原型:

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