例如,如果你想要一个修改3个指针值的函数,那么你需要将双指针声明为函数参数。如果用双指针写多行,代码将很难理解;那么有什么方法可以返回多个值,例如3个输入变量和2个输出变量?
int * function(int *p,int **q,int **r)
{
...
return p;
}
int main(){
int *p,*q,*r;
...
p=function(p,&q,&r);
...
return 0;
}
答案 0 :(得分:6)
您可以将要修改的所有变量放在结构中,并从函数中返回该结构 由于结构可以容纳任何数量的元素,因此可以通过这种方式从函数中返回任意数量的元素。
当然,任何因为所有实用价值都会在实际环境中受到限制。
答案 1 :(得分:1)
如果您要修改的元素属于同一类型,则可以使用struct
作为该数组或数组:
struct a {
int *p;
int *p2;
int *p3;
double *p4;
...
} ;
int * function(struct a*);
int main()
{
struct a a;
function(&a);
return 0;
}
答案 2 :(得分:0)
你也可以传递指向函数的指针并修改函数中的指针,但是使用结构更好
答案 3 :(得分:0)
如前所述,您可以使用结构来聚合多个值。 @ obounaim的示例演示了一个函数,它接受一个指向这种结构的指针,但是也可以通过值返回一个结构,这可能更简单,更易读。
typedef struct
{
int x ;
int y ;
int z ;
} coord3d ;
coord3d getPosition(void);
int main()
{
coord3d pos = getPosition();
return 0;
}
对于大型结构,这可能非常昂贵,如果结构包含指针,则结构的所有副本都将指向相同的数据,因此需要谨慎,但通常这更简单,更直观。例如,如果结构包含一些紧密内聚的数据,例如笛卡尔坐标或复数,则此方法有意义,并且在按值语义返回时几乎没有开销。