学习C.使用用户定义的功能。
#include <stdio.h>
#include <stdlib.h>
int print_random_matrix (int m, int n);
void main (void)
{
int m, n;
printf("m: "); scanf("%d", &m);
printf("n: "); scanf("%d", &n);
print_random_matrix(m, n);
}
int print_random_matrix (int m, int n)
{
int i, j, a[20][20];
for (i= 1; i<= m; i++)
{
for (j= 1; j<= n; j++)
{
printf("%d ", rand()%10);
}
printf("\n");
}
//why does this work without RETURN?
}
据我所知,您需要一个return语句来从您定义的函数中返回值,但是它没有一个就可以工作,我也不知道为什么。 此代码对我而言并不正确。
代码正确吗?
&
为什么现在可以正常工作?
&
如何用return语句编写print_random_matrix函数?(如果需要)
答案 0 :(得分:3)
无法从具有非void
返回类型的函数返回值将调用undefined behavior。
未定义行为可以表现出来的一种方法是,程序看起来可以正常运行。但是,看似无关的更改可以更改未定义行为的显示方式。在这种情况下,您永远不会尝试使用返回值,因此这可能就是为什么您看不到任何奇怪行为的原因。
所以仅仅因为程序可能崩溃或输出奇怪的东西并不意味着会。
在这种情况下,正确的做法是将函数的返回类型更改为void
。
编辑:
即使您无法从函数中返回值,程序也可以正常运行,因为您没有尝试使用该返回值。如果确实尝试使用返回值,则 then 会调用未定义的行为。不过,您应该更改函数以返回void
或返回一些有意义的值。