我有一个采用固定大小数组的函数。数组的内容将在此函数中修改,因此我想将数组作为指针传递。
以下是我的数组的定义:
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 :(得分: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);