在C语言中动态分配指向结构的指针数组

在C语言中动态分配指向结构的指针数组,c,arrays,pointers,allocation,structure,C,Arrays,Pointers,Allocation,Structure,我在这里有这样的结构: typedef struct _open { int x; struct _open *next; } *NODE; 在我的主函数中,我声明了这个指针: NODE open = initOpen(size); 以下是initOpen函数: NODE initOpen(int size) { return (NODE)malloc(sizeof(struct _open)*size); } 我想这是对的?我是否可以在主功能中访问我的阵列,如:打

我在这里有这样的结构:

typedef struct _open {
    int x;
    struct _open *next;
} *NODE;
在我的主函数中,我声明了这个指针:

NODE open = initOpen(size);
以下是initOpen函数:

NODE initOpen(int size) {
    return (NODE)malloc(sizeof(struct _open)*size);
}

我想这是对的?我是否可以在主功能中访问我的阵列,如:打开[0]到打开[9]?

首先,您应该遵守一些约定:

typedef struct node {
    int x;
    struct node *next;
} *nodePtr;
第二,参数大小的用途是什么? 根据我的说法,分配新nodePtr的正确方法是:

nodePtr initNodePtr() {
    return (nodePtr)malloc(sizeof(struct node));
}
另外,使用后不要忘记释放内存:

nodePtr node = initNodePtr();
...
...
free(node); //should be wrapped in a function to respect design.
要创建结构数组,应执行以下操作:

typedef struct {
    int x;
    node* next;
} node;

int main() {
    node* nodeArray = (node*)malloc(sizeof(node)*50); // 50 = size of your array
    ...
    // do whatever you want
    ...
    free(nodeArray);   
}

未测试,如果有错误请告诉我。

首先,您应该遵守一些约定:

typedef struct node {
    int x;
    struct node *next;
} *nodePtr;
第二,参数大小的用途是什么? 根据我的说法,分配新nodePtr的正确方法是:

nodePtr initNodePtr() {
    return (nodePtr)malloc(sizeof(struct node));
}
另外,使用后不要忘记释放内存:

nodePtr node = initNodePtr();
...
...
free(node); //should be wrapped in a function to respect design.
要创建结构数组,应执行以下操作:

typedef struct {
    int x;
    node* next;
} node;

int main() {
    node* nodeArray = (node*)malloc(sizeof(node)*50); // 50 = size of your array
    ...
    // do whatever you want
    ...
    free(nodeArray);   
}

未测试,请告诉我是否有错误。

首先,您执行动态分配数组的方式是错误的。
我不确定你是真的想要你写的东西,那是链表,还是你说的东西,那是动态分配的数组

下面是如何动态分配阵列。希望能有帮助。 通过这样做,您可以在内存不足之前向数组中添加任意数量的整数。您可以使用数组表示法访问数组,但首先使用指针:darray->array[0]

但是,无法使用此语法访问链接列表

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

#define INITSIZE 8

typedef struct dyarr{
    int num;
    int max;
    int *array;
}arr;

arr* makeArr();
void add( arr*, int );

int main( int argc, char const *argv[] ){
    int t;
    arr* darray = makeArr();
    while( scanf( "%d", &t ) != EOF ){
        add( darray, t );
    }
    int i;
    for( i = 0; i<darray->num; i++ ){
        printf( "%d\n", darray->array[i] );
    }
    getchar();
    return 0;
}

arr* makeArr(){
    arr* A = malloc( sizeof( arr ) );
    A->max = MAXSIZE;
    A->num = 0;
    A->array = malloc( sizeof( int )*A->max );
    return A;
}

void add( arr* a, int i ){
    if( a->num == a->max ){
        a->max *= 2;
        a->array = realloc( a->array, a->max );
    }
    a->array[a->num++] = i;
}
#包括
#包括
#定义初始大小8
typedef结构dyarr{
int-num;
int max;
int*数组;
}arr;
arr*makeArr();
无效添加(arr*,int);
int main(int argc,char const*argv[]{
int t;
arr*darray=makeArr();
while(scanf(“%d”,&t)!=EOF){
添加(darray,t);
}
int i;
对于(i=0;inum;i++){
printf(“%d\n”,darray->array[i]);
}
getchar();
返回0;
}
arr*makeArr(){
arr*A=malloc(sizeof(arr));
A->max=MAXSIZE;
A->num=0;
A->array=malloc(sizeof(int)*A->max);
返回A;
}
无效添加(arr*a,int i){
如果(a->num==a->max){
a->max*=2;
a->array=realloc(a->array,a->max);
}
a->array[a->num++]=i;
}

首先,动态分配数组的方式是错误的。
我不确定你是真的想要你写的东西,那是链表,还是你说的东西,那是动态分配的数组

下面是如何动态分配阵列。希望能有帮助。 通过这样做,您可以在内存不足之前向数组中添加任意数量的整数。您可以使用数组表示法访问数组,但首先使用指针:darray->array[0]

但是,无法使用此语法访问链接列表

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

#define INITSIZE 8

typedef struct dyarr{
    int num;
    int max;
    int *array;
}arr;

arr* makeArr();
void add( arr*, int );

int main( int argc, char const *argv[] ){
    int t;
    arr* darray = makeArr();
    while( scanf( "%d", &t ) != EOF ){
        add( darray, t );
    }
    int i;
    for( i = 0; i<darray->num; i++ ){
        printf( "%d\n", darray->array[i] );
    }
    getchar();
    return 0;
}

arr* makeArr(){
    arr* A = malloc( sizeof( arr ) );
    A->max = MAXSIZE;
    A->num = 0;
    A->array = malloc( sizeof( int )*A->max );
    return A;
}

void add( arr* a, int i ){
    if( a->num == a->max ){
        a->max *= 2;
        a->array = realloc( a->array, a->max );
    }
    a->array[a->num++] = i;
}
#包括
#包括
#定义初始大小8
typedef结构dyarr{
int-num;
int max;
int*数组;
}arr;
arr*makeArr();
无效添加(arr*,int);
int main(int argc,char const*argv[]{
int t;
arr*darray=makeArr();
while(scanf(“%d”,&t)!=EOF){
添加(darray,t);
}
int i;
对于(i=0;inum;i++){
printf(“%d\n”,darray->array[i]);
}
getchar();
返回0;
}
arr*makeArr(){
arr*A=malloc(sizeof(arr));
A->max=MAXSIZE;
A->num=0;
A->array=malloc(sizeof(int)*A->max);
返回A;
}
无效添加(arr*a,int i){
如果(a->num==a->max){
a->max*=2;
a->array=realloc(a->array,a->max);
}
a->array[a->num++]=i;
}

为了创建指向结构的指针数组,我可以在代码中更改什么?您的标题是“将指针数组分配给结构”,但您似乎希望从代码中分配一个结构数组(而不是指针数组)。这是哪一个?为了创建指向结构的指针数组,我可以在代码中更改什么?您的标题是“将指针数组分配给结构”,但您的代码似乎希望分配一个结构数组(而不是指针数组)。是哪一个?