c - 与双指针混淆 | 矩阵初始化
问题描述
我有以下代码处理使用双指针的读取矩阵。我想了解为什么作者会选择使用如下双指针:
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()
分配一个指针数组。每个指针指向矩阵的一行。
循环中的malloc()
调用for
为矩阵的每一行分配内存。
这就是动态分配二维矩阵的方式。
由于您要分配 的矩阵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));
推荐阅读
- powershell - 在 jams powershell 中创建 Precheck 作业
- azure-data-factory - 从 Azure 数据工厂中的第二次查找中的值筛选查找结果
- hp-uft - UFT:从excel文件中提取数据并在应用程序中动态输入的问题
- visualvm - VisualVM - 堆转储灰显
- sql-server - 如何向底层视图添加新字段?
- authentication - 使用 Azure 应用服务身份验证的 HttpContext 用户为空
- c# - 使用 Microsoft.CodeAnalysis/Roslyn 获取 XML 文档
- javascript - 如何使用 XPath 解析 JavaScript 内容
- mongodb - $查找对象数组中的id
- c# - 如何在 C# 6.0 的泛型类中包含特定于类型的代码?