2011-12-10 107 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);

相關問題