2011-12-10 71 views
3

每次我试试这个:无效操作数为二进制/(有'int *'和'int')?

long crypt(int *integer) 
{ 
printf("Enter five digit integer:\n"); 
scanf("%i",integer); 

int digit1=integer/10000; 
int digit2=(integer%10000)/1000; 
int digit3=(integer%1000)/100; 
int digit4=(integer%100)/10; 
int digit5=(integer%10)/1; 

const char *digit1c[10]; 
const char *digit2c[10]; 
const char *digit3c[10]; 
const char *digit4c[10]; 
const char *digit5c[10]; 

(还有更精彩的,但是这似乎是这个问题,我会要求增加休息。)

那么这个错误:

math2.h:44:20: error: invalid operands to binary/(have ‘int *’ and ‘int’) 
math2.h:45:21: error: invalid operands to binary % (have ‘int *’ and ‘int’) 
math2.h:46:21: error: invalid operands to binary % (have ‘int *’ and ‘int’) 
math2.h:47:21: error: invalid operands to binary % (have ‘int *’ and ‘int’) 
math2.h:48:21: error: invalid operands to binary % (have ‘int *’ and ‘int’) 

我知道它与我用来初始化数字的操作符有关,我尝试将它们的类型更改为“int *”,但这不起作用。 那么到底发生了什么呢?

回答

12

integer指针intint*),所以当你要使用INT它指向,则需要取消对它的引用:

int digit1=(*integer)/10000; // and so on... 
4

参数integer不是int对象;它是一个int*对象,即一个指针。 (和integer是一个指向对象误导性名称。)

如果更改:

int digit1=integer/10000; 

int digit1 = *integer/10000; 

并做出相应的改变你的代码的其余部分,将在最少编译。 integer是一个指针; *integer是它指向的int对象。 。

(而且,各地的二元操作空间将使你的代码更易于阅读的另一个很好的理由使用空白的是,如果该师被逆转,那么这样的:

int digit1=10000/*integer; 

将引入/* ... */评论。 )

4

这里的问题是,integer类型是int *,不支持的/%运营商的指针。您的问题有两种解决方案。

  1. 提领integer,通过每次使用它进行arithmatic时间*操作。
    例如int digit1=(*integer)/10000;

  2. integer更改为类型int。您必须更改该功能的签名,并且必须将scanf更改为使用&运算符,scanf("%i",&integer);

相关问题