[英]Assign int array to in pointer in struct
我創建了下面的C struct。
typedef struct KnightsMartSale {
char firstName[21];
char lastName[21];
int numItemsOnList;
int *itemsPurchased; // array of item numbers
struct KnightsMartSale *next;
} KMSale;
這可以將int數組分配給int * itemsPurchased指針嗎? 如果有可能打印值?
我根據要復制到itemsPurchased
的數組的大小來分配內存,並“記住” numItemsOnList
中可能的項目數。
所以假設你有一個給定的int數組,比如myArray
,那么復制和打印的代碼可能如下所示:
typedef struct KnightsMartSale {
char firstName[21];
char lastName[21];
int numItemsOnList;
int *itemsPurchased; // array of item numbers
struct KnightsMartSale *next;
} KMSale;
int main() {
KMSale kmsale;
int myArray[] = { 20,30,40,50 };
kmsale.numItemsOnList = sizeof(myArray)/sizeof(myArray[0]);
kmsale.itemsPurchased = calloc(kmsale.numItemsOnList,sizeof(int));
memcpy(kmsale.itemsPurchased,myArray,kmsale.numItemsOnList*sizeof(int));
for (int i=0; i<kmsale.numItemsOnList; i++) {
printf("item #%d: %d\n",i,kmsale.itemsPurchased[i]);
}
// kmsale not needed any more, free memory:
free(kmsale.itemsPurchased);
}
輸出:
item #0: 20
item #1: 30
item #2: 40
item #3: 50
只是一些快速的原型編碼...也許它可能會引導你進入正確的方式......
KMSale foo; // sample struct on stack, not initialized!
int my_buffer[12]; // not initialized stack buffer!
/* Assign pointer */
foo.itemsPurchased = my_buffer; // point to my_buffer
/* Print the first element via the struct... */
printf("%02x", foo.itemsPurchased[0]);
這可以將int數組分配給int * itemsPurchased指針嗎? 如果有可能打印值?
是的,我們可以為指針分配一個數組,因為數組是一個常量指針,反向是無效的。
但是應該非常小心地使用這個賦值,因為數組將是一個堆棧變量,並且在訪問此結構指針之前應該注意變量的范圍
此方法也優於動態內存分配,其中內存碎片是malloc和free所關注的,我們可以避免動態分配開銷。
以下是此代碼和數組中打印值的輸出:
#include <stdio.h>
typedef struct KnightsMartSale {
char firstName[21];
char lastName[21];
int numItemsOnList;
int *itemsPurchased; // array of item numbers
struct KnightsMartSale *next;
} KMSale;
int main() {
KMSale sale;
int iPos = 0;
int Array[] = {1, 2, 3, 4, 5};
sale.numItemsOnList = sizeof(Array) / sizeof(Array[0]);
sale.itemsPurchased = Array;
for (iPos=0; iPos < sale.numItemsOnList; iPos++) {
printf("sale %d: %d\n", iPos, sale.itemsPurchased[iPos]);
}
return 0;
}
輸出:
sale 0: 1
sale 1: 2
sale 2: 3
sale 3: 4
sale 4: 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.