如何分配指向结构的2D指针数组

托哈尔

这是我到目前为止所取得的成就,但是我不知道那是对的。此函数接收2D数组的尺寸(nxn),并对其进行分配。flightInfo是该结构的名称。这会工作吗?提前致谢

分配完数组后(忽略方法,因为我们不允许使用您提出的方法),我想初始化结构(我建立了一个函数来做,但是没有用),我试图做对分配后并不断收到“未处理的异常”警告,这与语法有关吗,我是否忘记了“ *”?

void flightMatrix()
{
 FILE * fpf;
 int checkScan,Origin,Dest;
 float  time,cost;
 char flightName[3];
 flightInfo *** matrix;


 if(!(fpf=fopen("flights.txt","r")))exit(1);

  while((checkScan=fscanf(fpf,"%*10c%3d%3d%3c%5f%7f%*",&Origin,&Dest,flightName,&time,&cost))!=EOF)
{
    matrix=allocateMatrix(Dest);
   matrix[Origin-1][Dest-1]->o=Origin;

}

}

flightInfo*** allocateMatrix(int n)

{   int i,j;
    flightInfo***  matrix;

matrix=(flightInfo***)malloc(sizeof(flightInfo **)*n);
    for(i=0;i<n;i++)
matrix[i]=(flightInfo **)malloc(sizeof(flightInfo*)*n);

 for (int i = 0; i < n; ++i) 
 {  
    for (int j = 0; j < n; ++j) 
        matrix[i][j] = NULL;
 }

    return matrix;
}

[ http://i.stack.imgur.com/MFC7V.png]这是我尝试初始化时发生的情况

格热哥兹·斯佩特科夫斯基

从技术上讲,这不会创建2D数组。结果将是一个指针数组,其中每个指针都指向一个结构的不同指针数组。

区别在于,内存将是零散的,因此每个元素都将指向某个内存位置,而不是单个连续的内存块。

常见的方法是创建扁平2D数组:

flightInfo** allocateMatrix(int n)
{
    flightInfo** matrix = malloc(n*n * sizeof(*matrix));
    for (int i = 0; i < n; i++) 
        for (int j = 0; j < n; j++) 
            matrix[i*n + j] = NULL;
    return matrix;
}

如果您被迫使用两个索引,则可以将矩阵作为函数参数:

void allocateMatrix(int n, flightInfo* (**matrix)[n])
{
    *matrix = malloc(n * sizeof(**matrix));
    for (int i = 0; i < n; ++i) 
        for (int j = 0; j < n; ++j) 
            (*matrix)[i][j] = NULL;
}

第二个星号是必需的,因为指针是按值传递的,否则您将得到修改后的指针的本地副本,这对matrixfrommain函数没有作用。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct flightInfo {
    char airport[30];
    int  altitude;
} flightInfo;

void allocateMatrix(int n, flightInfo* (**matrix)[n])
{
    *matrix = malloc(n * sizeof(**matrix));
    for (int i = 0; i < n; ++i) 
        for (int j = 0; j < n; ++j) 
            (*matrix)[i][j] = NULL;
}

int main()
{
    int n = 10;
    flightInfo* (*matrix)[n];

    allocateMatrix(n, &matrix);

    matrix[0][0] = malloc(sizeof(flightInfo));
    strcpy(matrix[0][0]->airport, "Heathrow");
    matrix[0][0]->altitude = 10000;

    printf("%s, %d\n", matrix[0][0]->airport, matrix[0][0]->altitude);
}

另一种方法是将数组封装在结构中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何创建指向2D指针数组的指针-C

来自分类Dev

2D数组(指向指针的指针)

来自分类Dev

C:指向2d数组的指针

来自分类Dev

存储指向2D数组的指针

来自分类Dev

指向2D数组的指针

来自分类Dev

用指向固定大小数组的指针分配2D数组

来自分类Dev

指向C ++中动态分配的2D数组中的一行的指针

来自分类Dev

在C中交换2d数组(指向指针的指针)

来自分类Dev

2D数组不会衰减到指向指针的指针

来自分类Dev

指向指针(2D数组)的指针作为输入参数

来自分类Dev

2D数组不会衰减到指向指针的指针

来自分类Dev

在C中交换2d数组(指向指针的指针)

来自分类Dev

2D数组作为指向char数组的指针

来自分类Dev

使用指向指向数组的指针的指针打印2D数组

来自分类Dev

指向C中的2D数组的指针

来自分类Dev

声明指向2D枚举数组的指针

来自分类Dev

指向未知大小的现有2d数组的指针?

来自分类Dev

指向2D数组C,C ++的指针

来自分类Dev

* p的大小,其中p是指向2D数组的指针

来自分类Dev

指向2D数组参数(C)的指针

来自分类Dev

使用双指针指向2D数组

来自分类Dev

如何构造一个指向结构的指针数组并将值分配给创建的结构

来自分类Dev

如何在C ++中初始化指向动态2D数组的指针

来自分类Dev

指向指针和指向2D数组的指针之间的区别

来自分类Dev

如何在C中通过malloc分配指针数组和2D数组?

来自分类Dev

如何创建指向结构的指针数组?C ++

来自分类Dev

指针数组(指向结构)

来自分类Dev

指向结构数组的指针

来自分类Dev

如何在C中的结构的指针成员中存储2d数组的内存地址