复制/指向typedef结构的指针

时间:2019-04-09 20:15:11

标签: c struct typedef

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

我具有以下结构:

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

我希望我有点清楚。

1 个答案:

答案 0 :(得分:1)

写时:

ITEM items[n];

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