我有一个执行某些操作的函数(该部分无关紧要)然后它设置一个名为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值设置为该新值。但我认为正在努力使这项工作正确。
答案 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);