为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C C#
海绵宝宝撒 2022-07-27 16:11:38
/* 将所给矩阵转秩后输出 */#include <stdio.h>#define SIZE 4void 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函数中变成转置矩阵,但是由于形参无法传递给形参应该不会输出转置吧?
查看完整描述

3 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

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

查看完整回答
反对 回复 2022-08-01
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

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

查看完整回答
反对 回复 2022-08-01
?
jeck猫

TA贡献1909条经验 获得超7个赞

因为c对于数组的存储形参和实参地址空间是共用的,所以改变形参的值,实际上改变了实参的值

查看完整回答
反对 回复 2022-08-01
  • 3 回答
  • 0 关注
  • 190 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号