指针部门可能吗?

时间:2014-06-22 15:08:22

标签: c pointers

如何使用指针在C中对2个变量进行除法和乘法? 我试过这个:

int multiplicate(int *x,int *y)
{
*x**y;
}


int divide(int *x,int *y)
{
*x/*y;
}

4 个答案:

答案 0 :(得分:2)

您错过了return声明:

int multiplicate(int* x, int* y)
{
  return (*x) * (*y);
}


int divide(int *x,int *y)
{
  return (*x) / (*y);
}

答案 1 :(得分:2)

请改用*x/(*y)。否则,它被解释为多行评论。你忘记了return

答案 2 :(得分:2)

由于间接运算符的优先级高于乘法运算符,因此不需要括号。

只需添加一些空格即可:

int multiplicate(int *x,int *y)
{
    return *x * *y;
}


int divide(int *x,int *y)
{
    return *x / *y;
}

答案 3 :(得分:0)

  

指针分区可能吗?

你不要试图在这里指定指针,但是使用解除引用* - 运算符时,指针指向的值是使用的。

然而,由于到目前为止给出的所有示例都完全错过了必要的错误检查,我提出了以下方法:

int multiply(int * pr, int * px, int * py)
{
  int result = 0; /* Be optimistic. */

  if (NULL == pr || NULL == px || NULL == py)
  {
    errno = EINVAL;
    result = -1;
  }
  else
  {
    *pr = *px * *py;
  }

  return result;
}

int devide(int * pr, int * px, int * py)
{
  int result = 0; /* Be optimistic. */

  if (NULL == pr || NULL == px || NULL == py)
  {
    errno = EINVAL;
    result = -1;
  }
  elseif (0 = *py)  /* Division by zero is not defined. */
  {
    errno = EDOM;
    result = -1;
  }     
  else
  {
    *pr = *px / *py;
  }

  return result;
}

调用这样的函数:

#include <stdio.h>
#include <errno.h>

/* The two functions above go here. */

int main(int argc, char ** argv)
{
  int result = EXIT_SUCCESS;

  if (2 > argc)
  {
    fprintf("Missing or invalid arguments.\n");
    printf("Usage: %s x y\n", argv[0]);
    result = EXIT_FAILURE;
  }

  if (EXIT_SUCCESS == result)
  {
    int x = atoi(argv[1]); /* Better use strtol here. */
    int y = atoi(argv[2]); /* Better use strtol here. */

    printf("Got x = %d and y = %d.\n", x, y);

    {
      int r;
      if (-1 == multiply(&r, &x, &y)
      {
        perror("multiply() failed");
      }
      else
      {
        printf("%d * %d = %d\n", x, y, r);
      }
    }

    {
      int r;
      if (-1 == multiply(&r, &x, &y)
      {
        perror("devide() failed");
      }
      else
      { 
        printf("%d / %d = %d\n", x, y, r);
      }
    }
  }

  return result; 
}

最后一个更合理的方法是在需要的地方使用指针

修改上述示例的可能approch如下所示:

int multiply(int * pr, int x, int y)
{
  int result = 0; /* Be optimistic. */

  if (NULL == pr)
  {
    errno = EINVAL;
    result = -1;
  }
  else
  {
    *pr = x * y;
  }

  return result;
}

int devide(int * pr, int x, int y)
{
  int result = 0; /* Be optimistic. */

  if (NULL == pr)
  {
    errno = EINVAL;
    result = -1;
  }
  elseif (0 = y) /* Division by zero is not defined. */
  {
    errno = EDOM;
    result = -1;
  }     
  else
  {
    *pr = x / y;
  }

  return result;
}

调用这样的函数:

#include <stdio.h>
#include <errno.h>

/* The two functions above go here. */

int main(int argc, char ** argv)
{
  int result = EXIT_SUCCESS;

  if (2 > argc)
  {
    fprintf("Missing or invalid arguments.\n");
    printf("Usage: %s x y\n", argv[0]);
    result = EXIT_FAILURE;
  }

  if (EXIT_SUCCESS == result)
  {
    int x = atoi(argv[1]); /* Better use strtol here. */
    int y = atoi(argv[2]); /* Better use strtol here. */

    printf("Got x = %d and y = %d.\n", x, y);

    {
      int r;
      if (-1 == multiply(&r, x, y)
      {
        perror("multiply() failed");
      }
      else
      {
        printf("%d * %d = %d\n", x, y, r);
      }
    }

    {
      int r;
      if (-1 == multiply(&r, x, y)
      {
        perror("devide() failed");
      }
      else
      { 
        printf("%d / %d = %d\n", x, y, r);
      }
    }
  }

  return result; 
}