双指针混淆 |矩阵初始化

Confusion with Double Pointers | Matrix Initialization

我有以下代码处理使用双指针的读取矩阵。我想明白为什么作者会选择使用双指针如下:

int N=10;
int i,j;
open = (long double**)calloc(N+2, sizeof (long double*));
for(i=0;i<N+2;i++)
  open[i]=(long double*)calloc(N+2, sizeof (long double));

用法

long double coord[500][2];
for(i=0;i<N+1;i++){
    fscanf(fin,"%s %s",column1,column2);
    coord[i][0]=atof(column1);
    coord[i][1]=atof(column2);
for(i=0;i<N;i++){
    for(j=0;j<N;j++)
        open[i][j]=sqrt(pow(coord[i][0]-coord[j][0],2.)+pow(coord[i][1]-coord[j][1],2.));

我没看到矩阵是如何用双指针初始化的,而只声明了一个数组 open[i] 而不是 open[i][j]

大概声明是

long double **open;

第一个malloc()分配一个指针数组。每个指针指向矩阵的一行。

for 循环中的 malloc() 调用为矩阵的每一行分配内存。

这就是动态分配二维矩阵的方式。

由于您正在分配 long double 的矩阵,因此您需要在 sizeof 调用中使用该类型。

open = calloc(N+2, sizeof (long double*));
for(i=0;i<N+2;i++)
  open[i]=calloc(N+2, sizeof (long double));