[英]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];
您正在創建長度為n
的ITEM
數組,數據的所有內存都分配在堆棧上。 現在,當您使用變量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));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.