gpt4 book ai didi

c - 制作 typedef 结构的副本/指针

转载 作者:行者123 更新时间:2023-11-30 19:02:36 25 4
gpt4 key购买 nike

我有一个填充了一些数据的结构,并且想通过为其分配一个指针来复制它。

我有以下结构:

typedef struct items {
double cijena;
char sifra[100], naziv[100];
} ITEM, *ITEMcopy;

*ITEMcopy 应该是指向 ITEM 内容(副本)的指针。

int main()中:

ITEM items[n];
ITEM *ITEMcopy = &items; // this is wrong

*ITEMcopy 应该在我稍后想要编辑其内容的函数中使用:

void sort(ITEM **items, int n)

所以基本上,我不想直接编辑 ITEM items[n] 内容,而是想为它所保存的数据分配一个指针并对其进行编辑。

产生错误的部分代码是ITEM *ITEMcopy = &items;

<小时/>

警告:从不兼容的指针类型初始化

我希望我说得比较清楚。

最佳答案

当你写下:

ITEM items[n];

您正在创建一个 ITEM 的数组长度n ,所有数据的内存都分配在堆栈上。当您使用变量items时它现在引用数组 items[0] 中的第一个元素它类似于指针,但有一些关于其长度的额外信息。

当你写下:

ITEM *ITEMcopy;

您正在创建一个名为 ITEMcopy 的指针可以包含 ITEM 的位置但没有为任何 ITEM 分配内存, ITEMcopy只是用来指向已经存在的 ITEM

如果您分配它:

ITEM *ITEMcopy = items;

ITEMcopy指向第一个ITEM的位置在items 。所以ITEMcopy现在是指向 items 中第一个元素的指针。

当你写下:

ITEM *ITEMcopy = &items;

这给你警告是因为 items已经起到了指针的作用。所以&items是一个指向 ITEM 的指针与 ITEMcopy 不兼容它需要一个指向 ITEM 的指针

sort函数应该看起来像这样:

void sort(ITEM *items, int n)

使用排序功能:

ITEM items[n];
sort(items, n);

在函数中使用变量:

void sort(ITEM *items, int n)
{
// could swap items[0] and items[1] like this
ITEM itemBuf;
memcpy(&itemBuf, &items[0], sizeof(ITEM));
memcpy(&items[0], &items[1], sizeof(ITEM));
memcpy(&items[1], &itemBuf, sizeof(ITEM));
}

关于c - 制作 typedef 结构的副本/指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55600638/

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