将int分割并存储回原始变量

时间:2017-11-01 01:51:21

标签: c pointers

我有一个执行某些操作的函数(该部分无关紧要)然后它设置一个名为num的值,然后打印该值。我的问题是作为我的功能的最后一步,然后打印它必须除以4的值。这就是我遇到麻烦的地方......见下文:

int *num = 0;

.
. //num is determined here...
.

num = num/4; // <-- My issue
printf("%d\n", num);

我得到的错误是:

error: invalid operands to binary / (have 'int *' and 'int')

其中,从搜索意味着我需要尊重它:

num = (*num)/4;

虽然这也不能正常工作(它没有给出任何错误,但它实际上将我的代码置于无限循环中并且Windows停止了它)。我要做的是将存储在num(地址)的值除以for,然后将num值设置为该新值。但我认为正在努力使这项工作正确。

2 个答案:

答案 0 :(得分:1)

num是指针类型。所以num = num /4;这是一件非常不可思议的事情。甚至不允许这样做。

根据标准 6.5.5 Each of the operands shall have arithmetic type.(乘法运算表达式)

编译器也告诉你那件事error: invalid operands to binary / (have 'int *' and 'int')

/有两个参数。但编译器正在查看操作数,它看到它们是*类型。所以它抱怨,因为它不允许作为标准。

num =*num/4;基本上是将整数结果赋给指针变量。即使这可能不会导致期望的行为,但允许。 (我们也做int *p =NULL

答案 1 :(得分:0)

下面的这句话声明了一个指针

int *num = 0;

意思是指某些有价值的记忆;

以下声明非常有趣

.
. //num is determined here...
.

当你说num在这里确定时,有几种方法可以解释这个

是否存在如下值的赋值,在这种情况下RHS必须为值

*num = some value;

或指向指针,如下所示,RHS必须是地址或指针。

num = some address;

最后,当您执行此操作时,您正在使用指针,因为num表示一个指针,其中*num表示值,而下面的语句对指针无效Multiplication or Division of a pointer is not allowed in C

num = num/4; // <-- My issue

当你在这里打印时,你基本上打印的是num的地址而不是打印值。

printf("%d\n", num);