-
最简单的方法是在main()
中分配第二个数组,并将其作为参数传递给函数(以及第一个数组)。
int i,j,matrix_1[len][len],matrix_2[len][len] = { { 0 } };
…
copiaDispari(matrix_1,matrix_2);
…
void copiaDispari(int matrix_1[len][len],matrix_2[len][len])
{
…
}
其他技术使用动态内存管理(malloc()
等),或将数组封装在结构中并传递结构类型(您可以返回包含数组的结构;不能从函数中返回数组) ,或者(有时但不经常)在函数中使用static
数组并返回指向它的指针(不要这样做),或者使用全局变量(也不要这样做!)。
-
函数可以具有无限多个参数。 C11 §5.2.4.1 Translation limits要求编译器接受函数定义并使用至少127个参数进行调用。仅仅5或6就不会引起编译器的焦虑。但是,减少参数数量是个好主意。
如果要从一个函数返回多个值,则可以将多个指针传递给该函数,并使其通过指针修改变量。或者,您可以将变量集包装到结构中,然后将指针传递给合适的结构,或者可以将合适的结构返回给调用函数。
-
当函数产生将由调用代码使用的值时,通常不应使用void
函数。您可以传递指向变量的指针,该函数可能会修改它们以返回其答案。如果函数可能失败,则可能使它在成功时返回0,而在失败时返回其他值;当然,这排除了它的返回类型void
。错误处理是C编程的主要部分。如果某个函数未返回表示成功或失败的值,则可能很难知道是否存在问题。
顺便说一句,该函数的前向声明不应为:
void copiaDispari();
在您的原始代码中,它应该是:
void copiaDispari(int m1[len][len]);
在修订后的代码中,应该是
void copiaDispari(int m1[len][len],int m2[len][len]);
这将有助于防止错误,例如使用错误数量的参数调用函数。
永远不要为参数列表使用()
编写函数声明。那表示该函数接受不确定数量的参数(但它不是像printf()
这样的可变参数列表函数)。如果函数不带参数,则在声明中写int function(void);
,为保持一致性,在定义中写int function(void) { … }
。尽管您可以在定义中编写int function() { … }
,但这并未提供该函数的原型,并且可能在同一源文件中将其误调用。请注意,C ++在这方面与C不同。旧的C代码(从产生C89 / C90标准之前开始)使用()
表示法;它别无选择。在这个千年中编写的代码不应使用()
表示法。
,
- [改写]如何将数据发送回调用函数?
基本上,您有两个选择
创建对象以将数据保存在调用函数中,传递一个指针并使被调用函数使用该对象
int main(void) {
int src1[10][10] = {0};
int src2[10][10] = {0};
fx(src1,src2);
}
或在被调用函数中使用malloc()
(和朋友),然后将其返回给负责free
资源的调用方。
typedef int m2[10][10];
int main(void) {
int src[10][10] = {0};
m2 *dst = fx(src);
// use dst
free(dst);
}
m2 *fx(int m[10][10]) {
m2 *x = malloc(10 * 10 * sizeof (int));
// work with m to change x values
return x;
}
第三个选择(不使用示例代码)是不赞成使用的,那就是使用全局变量。
- 如何在函数之间传递5或6个变量?
基本上,只需在调用代码中指定它们,例如
printf("%s bought %d %s for %.2f\n",name,quantity,"apples",quantity * price);
或者,如果变量相关,则可以尝试将它们分组在struct
中并传递一个指针
struct GroupData {
char name[100];
int quantity;
char item[100];
double price;
};
struct GroupData x = {"John",42,"apple",0.31};
workwithdata(&x); // can also pass a copy of the struct
// workwithcopy(x);
- 何时使用void函数或int函数?
在不需要使用函数中的值时使用void
void beep(void); // sounds the bell
要使用函数中的值时,请使用int
int currenttemp(void); // returns the temperature
本文链接:https://www.f2er.com/2782263.html