整数指针

时间:2016-12-15 13:18:09

标签: c function pointers

我是C编程和stackoverflow的新手。我明天有中期,我在学习期间遇到了这个问题。对于我在格式方面的错误,请接受我最深切的歉意。

问题:编写一个名为:divide的函数,它取两个整数和一个整数指针。该函数应将第一个整数除以第二个整数,并将结果作为整数返回,并将余数放入整数指针参数给出的地址中。

给定的主代码读取两个整数:a,b,并创建两个整数而不进行初始化:res,rem。完成函数调用,使res变量变为a / b,rem变量成为调用后的余数。

示例:

Input 12 5    Output 2 2  
Input 57 7    Output 8 1  

我写的代码是:

int divide (int a , int b);  
int divide (int a , int b)
{  
    int res;  
    int rem;  
    res = a/b;  
    rem = a - res * b ;  
    return res, rem;  
}  

int main(void)
{  
    int a,b;  
    scanf("%d%d", &a, &b);  
    int res, rem;  
    res = divide(a,b);  
    printf("%d %d", res, rem);  
    return 0;  
}  

当我运行它时,我得到res的正确值但是rem总是等于零。如何使用整数指针来表示rem值? 提前谢谢。

4 个答案:

答案 0 :(得分:2)

您还可以返回结构:

typedef struct
{
    int quot;
    int rem;
} div_t;

div_t div( int numerator, int denominator )
{
    div_t result;
    result.quot = numerator / denominator;
    result.rem = numerator % denominator;

    return( result );
}

已经实现为part of standard C

  

7.22.6.2 divldivlldiv函数

     

<强>概要

#include <stdlib.h>
div_t div(int numer, int denom);
ldiv_t ldiv(long int numer, long int denom);
lldiv_t lldiv(long long int numer, long long int denom);
     

<强>描述

     

divldivlldiv,函数计算numer / denom和   numer % denom只需一次操作。

     

<强>返回

     

divldivlldiv函数返回类型结构   div_tldiv_tlldiv_t分别包含两者   商和其余的。结构应包含(在任何一个   成员quot(商)和rem(其余),   每个都与参数numer和。{   denom。如果结果的任何一部分无法表示,那么   行为未定义。

请注意,调用div()ldiv()lldiv()可能比在两个单独的操作中计算商和余数更有效,因为大多数除法机器指令同时生成商和剩余部分在两个单独的寄存器中。

答案 1 :(得分:1)

int divide (int a , int b, int* rem)
{  
    int res;  
    res = a/b;  
    *rem = a - res * b ;  
    return res;  
}  

int main(void)
{  
    int a,b;  
    scanf("%d%d", &a, &b);  
    int res, rem;  
    res = divide(a,b, &rem);  
    printf("%d %d", res, rem);  
    return 0;  
}  

这应该有用。

  1. 您无法从函数返回多个值。由于逗号运算符,return res, rem;只会返回rem。
  2. 要在调用位置看到多个值,请使用指针。

答案 2 :(得分:0)

这里的问题是,

  return res, rem; 

相同
 return rem; 

由于comma operator的属性不符合您的预期。

你应该

  • 将指针传递给divide()函数以存储rem(余数)。
  • 返回结果res

答案 3 :(得分:0)

你不能return multiple values in C 您正在使用comma operator

的方式

链接上显示了一些解决方案,您可以返回包含所需值的结构或数组。

typedef struct your_return {
   int res;
   int rem;
} division_return;

division_return divide (int a , int b)
{  
    division_return ret;
    ret.res = a/b;  
    ret.rem = a - ret.res * b;
    return ret;
}

int main(void)
{
    int a,b;
    scanf("%d%d", &a, &b);
    division_return dr;
    dr = divide(a,b);
    printf("%d %d", dr.res, dr.rem);
    return 0;
}

通过价值传递结构不是一个好习惯,因为副本可能很昂贵,但是当您不熟悉该语言时,我不想为代码添加更多复杂性。 不幸的是,C没有references作为C ++,这使得一切变得更简单。

您还可以使用指针来更改函数内的值。

int divide (int a , int b, int* rem)
{  
    int res;  
    res = a/b;  
    *rem = a - res * b ;  
    return res;  
}