我正在努力通过跳转到C ++,我刚刚到达指针部分,因此,我的第一面墙。我正试图解决这个问题:
问题13.4
编写一个带有两个输入参数的函数,并为调用者提供两个单独的结果,一个是两个参数相乘的结果,另一个是添加它们的结果。由于您只能直接从函数返回一个值,因此您需要通过指针或引用参数返回第二个值。
我真的不明白这个问题。我需要编写一个函数,例如:
int function(int x, int y){
int addition = x + y;
int multi = x * y;
}
但是我因为我不完全理解我不知道如何适应指针的问题。如果有人能为我愚蠢,我将不胜感激。
谢谢你的时间!
答案 0 :(得分:5)
你可以尝试
int functionPtr(int x, int y, int* addition) {
// As JustSid mentioned in the comment, it would be good to check the pointer first
if (addition) {
*addition = x + y;
}
return x * y;
}
或者
int functionRef(int x, int y, int& addition){
addition = x + y;
return x * y;
}
当你想打电话给他们时
int x = 1;
int y = 2;
int addition1 = 0;
int multi = functionPtr(x, y, &addition1);
int addition2 = 0;
int multi = functionRef(x, y, addition2);
答案 1 :(得分:2)
这意味着来电者为其他结果提供了空间 例如:
int function(int x, int y, int& res2)
{
res2=x+y;
return x*y;
}
答案 2 :(得分:1)
有点偏离主题,因为我不太喜欢问题13.4构成的问题......如果你愿意,你可以返回整个对象。考虑:
class AddMul {
public:
int added;
int multiplied;
};
AddMul function(int x, int y) {
AddMul am;
am.added = x + y;
am.multiplied = x * y;
return am;
}
当然,你可以考虑一些其他有趣的东西,比如AddMul类可能包含作为成员的函数?或者也许是直接的构造函数?
class AddMul {
public:
int added;
int multiplied;
public:
AddMul(int x, int y) {
added = x + y;
multiplied = x * y;
}
int getAdd() const {
return added;
}
int getMul() const {
return multiplied;
}
};
无论如何,需要考虑的事情。
答案 3 :(得分:0)
这不是本书要求你做的,但是值得知道提供指针/引用以从函数返回多个结果的替代方法。
std::pair<int, int> function(int x, int y)
{
std::pair<int, int> p;
p.first = x + y;
p.second = x * y;
return p;
}
答案 4 :(得分:0)
我在C ++中非常生疏,所以请原谅我,如果我的答案有点偏,但基本上指针是赋予ADDRESS OF数据的变量,而不是数据本身。这意味着您可以将整数的地址传递给函数,以允许该函数跟随指针并将数据存储在该整数的内存位置。要获取变量或对象的地址,请使用&符号(&amp;)并使用指针使用星号(*)
示例:
int main(void){
int x = 2;
int y = 3;
int multiplicationResult = 0;
int additionResult = twoOperations(x, y, &multiplicationResult); // The ampersand allows us to pass in a pointer to the memory address of multiplicationResult, rather than the value currently stored in it (0)
// additionResult will now be 5
// multiplicationResult will now be 6 - our function was able to store the result in memory using the pointer so we didn't need to use an assigment statement.
}
int twoOperations(int x, int y, int *multiResult){
int addition = x + y;
*multiResult = x * y; // The asterisk basically means "follow this pointer and store the result in that memory location."
return addition;
}
当我自己阅读代码时,我首先通过像这样大声读出符号来学习如何处理指针: * =“按指针指向...” &安培; =“......的内存地址”
希望这有帮助!
答案 5 :(得分:0)
这是案文的重要部分:
编写一个带有两个输入参数的函数,并为调用者提供两个单独的结果[...]
这意味着sumAndProduct
的调用者可以调用它来接收sum和product,这个虚构的语法应该表达意思:
int main() {
int sum;
int product
(sum, product) = sumAndProduct(29, 541);
printf("the sum of the two numbers is %d and the product is %d\n", sum, product);
}
但是,C中没有这样的语法。练习要求您使用现有的C语法找到一种方法(提示:函数参数的类型可以是int*
或int&
。)
编辑:你可以有一个带4个参数的函数,其中两个是输入参数,两个是输出参数;因此有一个4-arg函数,它只需要两个输入参数。
答案 6 :(得分:0)
由于问题显示'带有两个输入参数的函数',因此函数中不能有3个参数。实现此目的的一种方法是返回指向数组的指针。所以
int * function(int x, int y) {
int * res = new int[2];
//Perform computation
//res[0] = ...
//res[1] = ...
return res;
}
请注意,您应该在调用函数中释放数组内存。
答案 7 :(得分:0)
int function(int a, int &b){
if (a == 0 || b == 0)
{
int bb = b;
b = 0;
return a+bb;
}
b = (b*a);
return a+(b/a);
}
这可能不好,但确实只有2个参数。