使用函数在C中操作结构

时间:2012-05-24 17:26:29

标签: c arrays pointers struct

我正在尝试使用函数操作一个动态分配的矩阵声明为全局指针,为了简单起见,我不会在这里粘贴代码,但我会提供一个等效的,可能更清晰的示例

structname **variable;

int main()
{
    variable = readfile("filename");
    variable = modify(variable);
    output(variable);
}

这看起来很简单,输入和输出工作正常,问题是我的“修改”功能没有做任何修改,这是一个例子:

structname **modify(structname **p)
{
  swapitems(p[x][y],p[j][z]);
  modifyitem(p[x][y]);
  return p;
}

void swapitems(structname a, structname b)
{
     structname buffer;

     buffer = b;
     b = a;
     a = buffer;
}

我想问题是我无法将元素传递给swapitemsmodifyitem,我怎样才能使用modify中的函数修改项目? (当然没有编译错误)

1 个答案:

答案 0 :(得分:4)

由于您实际上是将结构本身作为参数传递,因此您只需交换哪些堆栈位置具有哪个结构,然后在返回时不会影响原始数组。你可以通过传入数组中结构的实际地址来解决这个问题:

void swapitems(structname* a, structname *b){

    structname buffer;

    buffer = *b;
    *b = *a;
    *a = buffer;
}

然后函数调用应该是

swapitems(&p[x][y],&p[j][z]);

您也应该同样将要修改的项目的地址传递给modifyitem