-2

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

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?(当然没有编译错误)

4

1 回答 1

4

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

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

    structname buffer;

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

那么函数调用应该是

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

您还应该同样将您正在修改的项目的地址传递到modifyitem

于 2012-05-24T17:35:54.947 回答