c - 动态分配指针数组到C中的结构

标签 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);
}

我这样说对吗?我可以在主函数中访问我的数组,例如:open[0] 到 open[9] 吗?

最佳答案

首先,你做动态分配数组的方式是错误的。
我不确定您是否真的想要您写的东西,即链表,或者您所说的东西,即动态分配的数组

下面是您应该如何动态分配数组。希望能帮助到你。 通过这样做,您可以在内存用完之前向数组中添加任意数量的整数。您可以使用数组表示法访问数组,但首先使用指针: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;
}

关于c - 动态分配指针数组到C中的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15080152/

相关文章:

android - Android中webview与libc.so文件的关系

c - 如何在不接触缓存的情况下写入或读取内存

C: 使用 fscanf 读取 json 数组

c - 将返回的指针分配给一个新数组

c++ - 打印 C++ int 指针与 char 指针

c - 在Windows和Linux之间切换Eclipse中的C项目配置

arrays - 在 postgres 中,使用表达式 array[] 与使用带有 {} 的数组的字符串表示之间有什么区别吗?

java - 来自控制台的字符串数组

c++ - 类定义可以在 C++ 中包含该类的指针吗?

c++ - 检查char *是否为null或为空时取消引用NULL指针警告