C 1D数组传递给两个函数,只有一个函数输出正确的结果。为什么?

C 1D数组传递给两个函数,只有一个函数输出正确的结果。为什么?,c,arrays,C,Arrays,我有两个程序。我从main中的数组x开始。一个例程用于为数组x中的每个对应元素生成三角形数并输出新数组。另一个例程做同样的事情,只是它现在是阶乘数 我在main函数中对每个例程进行了两次调用。但是只有第一个调用的函数才能生成正确的结果。所以我知道我的代码对这两个例程都是正确的。但我不知道怎么了 #包括 #定义maxRow 3 #定义maxCol 4 void阶乘(整数矩阵[maxRow][maxCol]){ int行、列、i、乘积; 对于(行=0;行

我有两个程序。我从main中的数组x开始。一个例程用于为数组x中的每个对应元素生成三角形数并输出新数组。另一个例程做同样的事情,只是它现在是阶乘数

我在main函数中对每个例程进行了两次调用。但是只有第一个调用的函数才能生成正确的结果。所以我知道我的代码对这两个例程都是正确的。但我不知道怎么了

#包括
#定义maxRow 3
#定义maxCol 4
void阶乘(整数矩阵[maxRow][maxCol]){
int行、列、i、乘积;
对于(行=0;行对于(i=1;i第一次调用时,您正在对
x
进行更改。现在,第二次将其传递到
triangal()
时,它不是原始的
x
——它是更改后的数组
x
(函数
阶乘()
的结果)

复制数组可以解决问题。(制作临时副本-打印结果-然后回滚对
x
所做的更改)

void阶乘(整数矩阵[maxRow][maxCol]){
整数拷贝[maxCol][maxCol];
int行、列、i、乘积;
对于(行=0;行对于(i=1;i第一次调用时,您正在对
x
进行更改。现在,第二次将其传递到
triangal()
时,它不是原始的
x
——它是更改后的数组
x
(函数
阶乘()
的结果)

复制数组可以解决问题。(制作临时副本-打印结果-然后回滚对
x
所做的更改)

void阶乘(整数矩阵[maxRow][maxCol]){
整数拷贝[maxCol][maxCol];
int行、列、i、乘积;
对于(行=0;行对于(i=1;i),最好在
main
之前使用
void triangal(int-matrix[maxRow][maxCol]);
。然后,编译器将警告如果与实际定义不匹配,最好使用
void triangal(int-matrix[maxRow][maxCol])
main
之前。然后,如果与实际定义不匹配,编译器将发出警告。我知道在调用Triangal时,它接收的矩阵是由factorial生成的新矩阵。但问题是在Triangal例程中,为每个插槽分配了新值。旧的factorial乘积不应该简单地替换为w吗每个元素都有一个新的三角形和?@user132522.:传递给
triangal
函数的
matrix
不是原始函数,您再次看到传递的
x
来自
main()
再次在
三角函数中
现在你会看到在这个函数中你使用了
矩阵
的值和你计算和的元素-它是变化的元素。你可以放一个打印语句-你会知道。旧的阶乘积被真正地替换了,但是用来计算结果的值是阶乘函数。因此,如果使用原始初始值
x
Ok,则得到的值与得到的值不同。因此,当我将数组x作为数组矩阵传递给三角函数时,数组矩阵只包含指向x的指针。如何知道数组变量何时包含指向现有数组或品牌的指针新数组?如果你传递一个数组,它将衰减为一个指针,然后你对它进行更改(你怎么知道?你更改了它的值等等)。从你的代码中可以清楚地看出数组已经更改。(你计算了阶乘)。所有这些都清楚地阅读了您的代码。如果它是一个新数组,您将动态创建它。在这里,您将原始数组传递给函数。这就是您使用原始数组的方式。我知道当调用Triangal时,它收到的矩阵是由阶乘生成的新矩阵。但问题在于Triangal routine,新的值被分配给每个插槽。对于每个元素,旧的阶乘积不应该被简单地替换为新的三角形和吗?@user132522.:传递给
triangal
函数的
matrix
不是原来的函数,您再次看到传递的是
x
from
main()
再次在
三角函数中
现在你会看到在这个函数中你使用了
矩阵
的值和你计算和的元素-它是变化的元素。你可以放一个打印语句-你会知道。旧的阶乘积被真正地替换了,但是用来计算结果的值是阶乘函数。因此,如果使用原始初始值
x
Ok,则得到的值与得到的值不同。因此,当我将数组x作为数组矩阵传递给三角函数时,数组矩阵只包含指向x的指针。如何知道数组变量何时包含指向现有数组或品牌的指针新数组?如果你传递一个数组,它将衰减为一个指针,然后你对它进行更改(你怎么知道?你更改了它的值等等)。从你的代码中可以清楚地看出数组已经更改。(你计算了阶乘)。所有这一切都很清楚。如果它是一个新数组,您将动态创建它。在这里,您将原始数组传递给函数。这就是您使用原始数组的方式。
void factorial(int matrix[maxRow][maxCol]) {
    int copy[maxCol][maxCol];
    int row, column, i, product;
    for (row = 0;row < maxRow;++row) {
        for (column = 0;column < maxCol;++column) {
            product = 1;
            copy[row][column]=matrix[row][column];
            for (i = 1; i <= matrix[row][column];++i) {
                product = product*i;
            }//innermost loop ends
            matrix[row][column] = product;
        }//inner loop ends
    }//big for ends

    printf("Factorial number matrix:\n");

    for (row = 0;row < maxRow;++row) {
        for (column = 0;column < maxCol;++column) {

            printf("%i\t\t", matrix[row][column]);
            matrix[row][column]=copy[row][column];
        }//inner loop ends
        printf("\n");
    }//big for ends
}