用一些限制将数字除以2

时间:2016-04-09 04:14:20

标签: c function

所以我需要创建一个除法函数,它将从主类中取一个数字并除以2。

这是我到目前为止所做的:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
  int num = 20;
  divide(num);
  printf(num);
}

void divide(int* a)
{
  int prod = a;
  int y;
  y = prod/2;
}

我认为除非上面的代码是错误的,否则我遇到麻烦的唯一部分。

谢谢!

2 个答案:

答案 0 :(得分:4)

这里有两个错误,不幸的是C相对容易制作。

首先,您需要将指针传递给divide,但是您当前正在传递一个已转换为指针的整数。换句话说,您需要传递num的地址,而不是值num。简而言之,您需要使用divide(&num)而不是divide(num)

其次,你在divide犯了类似的错误。您已接受指向整数a的指针,然后将a除以2. a不是整数。它是一个指向整数指针!如果要对a指向的值进行操作,则必须取消引用它。换句话说,您需要a* = *a / 2;

作为旁注,你应该提出你使用的任何编译器的警告。如果您在没有显式强制转换的情况下将整数转换为指针或指向整数的指针,则所有主要编译器都会发出警告。例如,如果您正在使用gcc,则可能需要使用-Wall -Wextra -pedantic标志(或者阅读gcc文档并找到一些更适合您的标志)。这可能看起来像gcc -o some_prog -Wall -Wextra -pedantic some_prog.cpp

答案 1 :(得分:3)

我认为这是一个家庭作业问题。为了将来参考,当它是一个家庭作业问题时,你应该标记它。

这个问题是关于指针的。这里的核心概念是除法函数采用指向整数的指针。指针是内存中的一个位置 - 使用该指针,它可以直接转到该位置并在那里修改值。然后main()将能够看到该值而无需从divide()返回它。

第一步是划分。我将包含注释以解释每个步骤的作用。

void divide(int* a)
{
  //go to the location in memory referenced by a and get the value
  int aValue = *a;

  //divide the value by 2
  aValue = aValue / 2;

  //store the value in the memory location referenced by a
  *a = aValue;
}

下一步是稍微改变你的主要功能。现在你传递divide()和整数。你需要传递一个整数指针。

尝试以下方法。 “&amp;”运算符获取变量的内存地址。

int main()
{
  int num = 20;
  divide(&num);
  printf("%d\n", num);
}

请注意,如果尝试将奇数除以2,则此程序可能会遇到错误,但对于您的示例,这应该没问题。让我知道任何其他问题。