制作/指向typedef结构的指针的副本

问题描述 投票:-1回答:1

我有一个填充了一些数据的结构,并希望通过指定它来制作它的副本。

我有以下结构:

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;


warning: initialization from incompatible pointer type

我希望我有点清楚。

c struct typedef
1个回答
1
投票

当你写:

ITEM items[n];

你正在创建一个长度为ITEMns数组,数据的所有内存都在堆栈上分配。当你使用变量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);

要使用sort函数:

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

在函数中使用变量:

qazxswpoi
© www.soinside.com 2019 - 2024. All rights reserved.