5

每次我尝试这个:

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 *但没有奏效。那么这里到底发生了什么?

4

3 回答 3

14

integer是一个指向int( ) 的指针,int*所以当你想使用它指向的 int 时,你需要取消引用它:

int digit1=(*integer)/10000; // and so on...
于 2011-12-10T23:59:49.490 回答
4

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

如果你改变:

int digit1=integer/10000;

int digit1 = *integer / 10000;

并对其余代码进行相应的更改,它至少会编译。 integer是一个指针;*integerint它指向的对象。

(此外,二元运算符周围的空格会使您的代码更易于阅读。使用空格的另一个好理由是,如果除法相反,那么:

int digit1=10000/*integer;

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

于 2011-12-11T00:00:05.370 回答
4

integer这里的问题是is的类型int *,一个不支持 and 运算符的/指针%。您的问题有两种解决方案。

  1. 取消引用,每次integer使用运算符执行算术运算时都使用它。 例如*
    int digit1=(*integer)/10000;

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

于 2011-12-11T00:02:09.857 回答