为什么结果是转置?希望高手解决

/* 将所给矩阵转秩后输出 */
#include <stdio.h>
#define SIZE 4
void print_array(int array[SIZE][SIZE])
{
int i, j;

for (i = 0; i < SIZE; ++i) {
for (j = 0; j < SIZE; ++j)
printf("\t%-4d", array[i][j]);
printf("\n");
}
}
void transpose_array(int array[SIZE][SIZE], int transpose[SIZE][SIZE]) {
int i, j;
for (i = 0; i < SIZE; ++i) {
for (j = 0; j < SIZE; ++j)
transpose[j][i] = array[i][j];
}
}
int main(void)
{
int array[SIZE][SIZE] = {{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11},
{12, 13, 14, 15}};
int transpose[SIZE][SIZE] = {0};
/* 打印二维数组*/
printf("Primary array:\n");
print_array(array);
/* 将数组转秩结果存入另一个数组中 */
transpose_array(array, transpose);
/* 打印二维数组*/
printf("\nFinal array:\n");
print_array(transpose);
return 0;
}
为什么transpose开始是数组全是0,后来在 transpose_array函数中变成转置矩阵,但是由于形参无法传递给形参应该不会输出转置吧?

海绵宝宝撒
浏览 191回答 3
3回答

阿波罗的战车

明确一点,由于C只有值传递,所以任何情况下,形参只是实参的副本,形参改变都不会影响实参【本身】那么特别的,这里的参数是指针举个例子,若定义int a=0,*p=&a,*q=&a;那么如果(*p)++后,你认为(*q)的值是多少...当然是1那么在带回函数调用的问题,如果参数是指针的话,同上理,是间接改变变量的值,这也正是值传递精髓

慕无忌1623718

数组对应一段地址,无论实参还是形参都是操作该段地址的内容。

jeck猫

因为c对于数组的存储形参和实参地址空间是共用的,所以改变形参的值,实际上改变了实参的值
打开App,查看更多内容
随时随地看视频慕课网APP