我已经在C结构下创建了
typedef struct KnightsMartSale {
char firstName[21];
char lastName[21];
int numItemsOnList;
int *itemsPurchased; // array of item numbers
struct KnightsMartSale *next;
} KMSale;
是否可以将int数组分配给 int *购买的商品指针? 如果可能,如何打印值?
答案 0 :(得分:4)
我将根据要复制到itemsPurchased
中的数组的大小分配内存,并“记住” numItemsOnList
中可能的项数。
因此,假设您有一个给定的整数数组,例如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
答案 1 :(得分:0)
只需一些快速的原型编码...也许可以将您引向正确的方向...
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]);
答案 2 :(得分:0)
在这里可以将int数组分配给int * items购买的指针吗?如果可能,如何打印值?
是的,我们可以将数组分配给指针,因为数组是常量指针,而反向是无效的。
但是应非常谨慎地使用此分配,因为数组将是一个堆栈变量,并且在访问此结构指针之前应注意变量的范围
此方法也比动态内存分配更可取,因为动态内存分配是malloc和free关心的内存碎片问题,我们可以避免动态分配开销。
以下是此代码以及在数组中输出打印值的代码:
.join()
输出:
#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;
}