双指针混淆 |矩阵初始化
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));
我有以下代码处理使用双指针的读取矩阵。我想明白为什么作者会选择使用双指针如下:
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));