我有两个结构
typedef struct {
int i;
int p;
} item;
typedef struct {
item items[10];
} buffer;
void swap (item** p1, item** p2) {
item* temp = *p1;
*p1 = *p2;
*p2 = temp;
}
我试图打电话
item *ps = &buffer.items[0];
item *p = &buffer.items[1];
swap(&ps, &p);
但它没有交换它们?我究竟做错了什么?谢谢 如果struct缓冲区在main或global中是本地的,会有任何变化吗?
由于
答案 0 :(得分:0)
你可以交换指针而不是结构!
item item0, item1, item2, item3, item4, item5, item6, item7, item8, item9;
typedef struct {
item * items[10] = { &item0, &item1, &item2, &item3, &item4, &item5, &item6, &item7, &item8, &item9 };
} buffer;
item **ps = &(buffer.items[0]);
item **p = &(buffer.items[1]);
swap(ps, p);
答案 1 :(得分:0)
您的函数仅交换指针 ps
和p
,而不是它们指向的实际结构。为此你需要复制结构,比如
void swap (item* p1, item* p2) {
item temp = *p1;
*p1 = *p2;
*p2 = temp;
}
呼叫
swap(&buffer.items[0], &buffer.items[1]);