c++中函数的返回值类型和形参类型用引用,指针,和原本的值的区别

该怎么确定要用哪个,在没有编译器的情况下

int a(int b)
int* a(int b)
int & a(int b)
int a(int* b)
int a(int &b)
class A{}
A* b(A&a)
A  b(A&a)
A&b(A&a)
A* b( A*a)

以此类推,什么情况这么用,有什么区别

如有帮助给个采纳谢谢

  1. int a(int b): 这是一个普通函数,它接受一个整数参数 b,并返回一个整数。你可以直接调用该函数,例如 int result = a(10);。这种形式适用于无需修改传入参数的情况。

  2. int* a(int b): 这是一个返回指针的函数。它接受一个整数参数 b,并返回一个指向整数的指针。你可以通过调用该函数来获取指针,例如 int* ptr = a(10);。这种形式适用于需要返回动态分配的内存或者将函数作为结果传递给其他函数的情况。

  3. int & a(int b): 这是一个返回引用的函数。它接受一个整数参数 b,并返回一个整数的引用。你可以将该引用用作变量的别名,例如 int num = 10; int& ref = a(num);。这种形式适用于希望通过函数修改传入参数的情况,或者避免拷贝大型对象的开销。

  4. int a(int* b): 这是一个接受指针参数的函数。它接受一个指向整数的指针 b,并返回一个整数。你可以将一个整数指针传递给该函数,例如 int num = 10; int result = a(&num);。这种形式适用于需要操作指针指向的数据或者传递指针给其他函数的情况。

  5. int a(int &b): 这是一个接受引用参数的函数。它接受一个整数的引用 b,并返回一个整数。你可以将一个整数的引用传递给该函数,例如 int num = 10; int result = a(num);。这种形式适用于希望通过函数修改传入参数的情况,或者避免拷贝大型对象的开销。

  6. class A { }: 这是一个类的定义。

  7. A* b(A&a): 这是一个返回指针的成员函数。它接受一个类A的引用 a,并返回一个指向类A的指针。你可以通过调用该成员函数来获取指针,例如 A obj; A* ptr = obj.b(obj);。这种形式适用于类需要返回指针以便于动态分配内存或者将对象指针作为结果传递给其他函数的情况。

  8. A b(A&a): 这是一个返回类对象的成员函数。它接受一个类A的引用 a,并返回一个类A的对象。你可以通过调用该成员函数来获取对象,例如 A obj; A newObj = obj.b(obj);。这种形式适用于需要返回新的类对象或者进行对象拷贝的情况。

  9. A& b(A&a): 这是一个返回类引用的成员函数。它接受一个类A的引用 a,并返回一个类A的引用。你可以将该引用用作变量的别名,例如 A obj; A& ref = obj.b(obj);。这种形式适用于希望通过函数修改传入参数的情况,或者避免拷贝大型对象的开销。

  10. A* b(A*a): 这是一个接受指针参数的成员函数。它接受一个指向类A的指针 a,并返回一个类A的指针。你可以将一个类A的指针传递给该成员函数,例如 A obj; A* ptr = obj.b(&obj);

1.原本的值
改变形参不会改变实参,如果你只是需要值本身,就直接传递值
2.指针
如果你的计算结果需要通过参数传递回去(因为return只能返回一个值,不能返回多个值),或者传递进来的本身就是指针(数组也是一种指针),那么参数类型就应该用指针
3.引用
在c中是没有引用这种东西的,如果你需要通过参数返回,就必须用指针
而c++提供了引用,可以让你不定义指针而将值返回,本质上是个语法糖