我想创建一种名为 add_order 的方法,以将新订单添加到现有订单数组中。 main的前三行工作正常,直到那一点我都了解了指针,但是我在努力使用add_order方法时,在printf中也无法正常工作。如何访问指针内部的指针数组?
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int count;
char type;
} *pizza;
typedef struct {
int courier;
int day;
pizza p;
} *order;
typedef struct {
order orders;
int orderCount;
} *monthlyorders;
monthlyorders new_monthlyorders(order o) {
monthlyorders m = malloc(sizeof(monthlyorders));
m->orders = malloc(sizeof(order));
m->orders = o;
m->orderCount = 0;
return m;
}
order new_order(int courier, int day, pizza p) {
order o = malloc(sizeof(order));
o->courier = courier;
o->day = day;
o->p = malloc(sizeof(pizza));
o->p = p;
return o;
}
pizza new_pizza(int count, char type) {
pizza pizza = malloc(sizeof(pizza));
pizza->count = count;
pizza->type = type;
return pizza;
}
monthlyorders add_order(monthlyorders m, order o) {
m->orderCount = (m->orderCount)+1;
(*(m->orders+1)) = malloc(sizeof(order));
return m;
}
int main() {
pizza p = new_pizza(2, 'A');
order o = new_order(1, 1, p);
monthlyorders m = new_monthlyorders(o);
add_order(m, o);
printf("%i\n", (*(m->orders+1)));
return 0;
}
答案 0 :(得分:1)
您只需要正确使用指针即可。您最有可能忘记做“订单”作为指针。让我知道它是否可以解决您的问题:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int count;
char type;
} *pizza;
typedef struct {
int courier;
int day;
pizza p;
} *order;
typedef struct {
order * orders; // order * orders -> create a pointer
int orderCount;
} *monthlyorders;
order new_order(int courier, int day, pizza p) {
order o = malloc(sizeof(order));
o->courier = courier;
o->day = day;
o->p = malloc(sizeof(pizza));
o->p = p;
return o;
}
pizza new_pizza(int count, char type) {
pizza pizza = malloc(sizeof(pizza));
pizza->count = count;
pizza->type = type;
return pizza;
}
monthlyorders add_order(monthlyorders m, order o) {
*(m->orders + m->orderCount) = o;
m->orderCount++;
return m;
}
monthlyorders new_monthlyorders(order o) {
monthlyorders m = malloc(sizeof(monthlyorders));
m->orders = malloc(1000); // You might need more cases (eg. 10000? )
m->orderCount = 0;
return add_order(m,o);
}
int main() {
pizza p = new_pizza(2, 'A');
order o = new_order(1, 1, p);
monthlyorders m = new_monthlyorders(o);
// Test cases
order o2 = new_order(2, 1, p);
add_order(m, o2);
// You might want to print out data from your object rather than the object itself
printf("%i\n", (*(m->orders))->courier);
printf("%i\n", (*(m->orders))->day);
printf("%i\n", (*(m->orders + 1))->courier);
printf("%i\n", (*(m->orders + 1))->day);
// Don't forget to free it
free(m->orders);
return 0;
}
编辑:考虑做伊恩说的话:替换
order o = malloc(sizeof(order));
与
order o = malloc(sizeof(*o));
以及类似的其他malloc调用