指针指向作为func参数的指针。

问题描述 投票:0回答:1
 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 pointers multidimensional-array
1个回答
1
投票

在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);  

我看到了这个:

enter image description here

当传递给我的时候:

int n = 2;
int col = 3;
void print_first_n_row(matrix, n, col);  

我看到了这个 enter image description here

还有一个建议,正如评论中所说:

这个:

x = matrix[i][j];  

比起 "我没有得到输出 "这句话

x=*(*(matrix+i)+j);

0
投票

"我没有得到输出"

如果你没有得到输出,要么 nrow0 或小于 0 因为如果它是不同的,你将得到至少一个输出。

检查你传递给 nrow 的调用函数中。

我个人认为换行的形式是 printf("\n"); 正在打印,但你没有注意到换行的输出。

© www.soinside.com 2019 - 2024. All rights reserved.