如何在结构中交换数组的struct元素 - C

时间:2016-04-20 14:04:05

标签: c struct swap items

我有两个结构

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中是本地的,会有任何变化吗?

由于

2 个答案:

答案 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)

您的函数仅交换指针 psp,而不是它们指向的实际结构。为此你需要复制结构,比如

void swap (item* p1, item* p2) {
   item temp = *p1;
  *p1 = *p2;
  *p2 = temp;
}

呼叫

swap(&buffer.items[0], &buffer.items[1]);