gpt4 book ai didi

c - 警告 :assignment makes integer from pointer without a cast

转载 作者:太空宇宙 更新时间:2023-11-04 06:56:17 24 4
gpt4 key购买 nike

当 Set_a 不包含它时,我想将 Set_b 的元素插入到 Set_a 列表中。我的意思是这样 {1, 2, 3} ∪ {3, 4, 5} = {1, 2, 3, 4, 5}.

typedef struct
{
ElemType data[MAXSIZE];
int length;
}SqList;

但起初,当我想创建一个新列表时,我遇到了一个编译警告:Assignment makes integer from pointer without a cast:

 void CreateList(SqList *L)
{


L->data[0] = (int*)(ElemType*)malloc(sizeof(int)*20);

L->length = 0;
}

我尝试将L->data[0]改成其他的,结果报错。

最佳答案

data 的空间已经分配。你可能想做这样的事情:

typedef struct
{
ElemType *data;
int length;
}SqList;

然后进行内存分配:

L->data = (ElemType*)malloc(sizeof(ElemType)*20);

实际上,不需要将malloc()的返回值强制转换为ElemType *。以下语句将执行:

L->data = malloc(sizeof(ElemType)*20);

动态扩展内存

您可以定义由两部分组成的结构来存储数据:

  1. ElemType 数组。固定尺寸。不需要动态内存分配。 SqList 的所有实例最多可包含 INITIAL_SIZE 个元素,无需动态分配内存。
  2. 指向ElemType 的指针。它提供了增加您可以在运行时存储的元素数量的可能性。

    typedef struct
    {
    ElemType data[INITIAL_SIZE]; // always allocated
    ElemType *ext; // it's up to you whether allocate this or not
    size_t length;
    } SqList;

每当您需要在 SqList 上分配更多内存时,您可以使用以下函数:

// Extends the number of elements the given SqList can hold in num_elems elements
ElemType* SqList_extend(SqList *p, size_t num_elems) {
if (p->ext) // memory already allocated?
return NULL; // then release it first

// perform allocation
if ((p->ext = malloc(sizeof(ElemType) * num_elems))) // successful?
p->length += num_elems; // then increase the element count
return p->ext; // return a pointer to the new allocated memory
}

关于c - 警告 :assignment makes integer from pointer without a cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44054229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com