簡體   English   中英

復制/指向typedef結構的指針

[英]Making a copy of/a pointer to a typedef struct

我有一個充滿一些數據的結構,想通過分配一個指向它的數據來制作它的副本。

我有以下結構:

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

我希望我有點清楚。

當你寫:

ITEM items[n];

您正在創建長度為nITEM數組,數據的所有內存都分配在堆棧上。 現在,當您使用變量items它指向數組items[0]的第一個元素,它類似於一個指針,但是有一些關於其長度的額外信息。

當你寫:

ITEM *ITEMcopy;

您正在創建一個稱為ITEMcopy的指針,該指針可以包含一個ITEM的位置,但是沒有為任何ITEM分配內存, ITEMcopy僅用於指向一個已經存在的ITEM

如果您分配它:

ITEM *ITEMcopy = items;

ITEMcopy指向第一的位置, ITEMitems 因此, 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));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM