我正在尝试使用函数操作一个动态分配的矩阵声明为全局指针,为了简单起见,我不会在这里粘贴代码,但我会提供一个等效的,可能更清晰的示例
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;
}
我想问题是我无法将元素传递给swapitems
和modifyitem
,我怎样才能使用modify
中的函数修改项目?
(当然没有编译错误)
答案 0 :(得分:4)
由于您实际上是将结构本身作为参数传递,因此您只需交换哪些堆栈位置具有哪个结构,然后在返回时不会影响原始数组。你可以通过传入数组中结构的实际地址来解决这个问题:
void swapitems(structname* a, structname *b){
structname buffer;
buffer = *b;
*b = *a;
*a = buffer;
}
然后函数调用应该是
swapitems(&p[x][y],&p[j][z]);
您也应该同样将要修改的项目的地址传递给modifyitem