void print_first_n_row(double **matrix, int n, int row) {
int i,j;
double x;
for(i=0;i<n;i++){
for(j=0;j<row;j++){
x=*(*(matrix+i)+j);
printf("%lf",x);
}
printf("\n");
}
}
我用这个函数没有得到输出。可能是什么原因?
在C语言中,数组在内存中逐行连续排列,称为 大班 例如,一个数组是这样创建的。
int array[4][3] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}};//4 rows of 3 columns
...在内存中存储为:
|1|2|3|4|5|6|7|8|9|10|11|12|
|row 1|row 2|row 3| row 4 |
所以你的函数: 按说,应该是通过 n
作为第二个参数中要打印的行数(正如它所做的那样),但要传递多少个 专栏 在第3个参数中有。
把这句话改成:
void print_first_n_row(double **matrix, int n, int row)
改为this:
void print_first_n_row(double **matrix, int n, int col)
我通过创建 [4][3]
用分配的内存为可访问的内存位置建立索引。double **matrix;
(4个指向double的指针,每个指针指向3个double的位置。) 然后用一系列数字填充每个位置,并传递适当的参数。
int n = 4;
int col = 3;
void print_first_n_row(matrix, n, col);
我看到了这个:
当传递给我的时候:
int n = 2;
int col = 3;
void print_first_n_row(matrix, n, col);
还有一个建议,正如评论中所说:
这个:
x = matrix[i][j];
比起 "我没有得到输出 "这句话
x=*(*(matrix+i)+j);
"我没有得到输出"
如果你没有得到输出,要么 n
或 row
应 0
或小于 0
因为如果它是不同的,你将得到至少一个输出。
检查你传递给 n
和 row
的调用函数中。
我个人认为换行的形式是 printf("\n");
正在打印,但你没有注意到换行的输出。