c语言 - 二进制操作数无效 / (有 '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 *,但这不起作用。那么这里到底发生了什么?

integer是指向int (int*)的指针,所以当你想使用它指向的整型时,你需要对它解引用:

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

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

int digit1=integer/10000;

int digit1 = *integer / 10000;

并对其余代码进行相应的更改,它至少可以编译。integer是指针;*integer是它所指向的int对象。

(此外,二进制操作符周围的空格将使您的代码更易于阅读。使用空格的另一个很好的理由是,如果除法颠倒,则如下:

int digit1=10000/*integer;

将引入/* ... */注释)

这里的问题是integer的类型是int *,一个指针不支持/%的操作符。你的问题有两个解决办法。

  1. 通过每次使用*运算符执行算术运算来取消对integer的引用。
    例:int digit1=(*integer)/10000;

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

可以通过解引用来添加整型指针,从而进行操作即添加* pointer

在解引用之后,我们实际做的是访问指针所指向的值。

int a = 10; int *ptr = &a;

ptr将包含变量a的地址,而*ptr将包含存储在a中的值。

最新更新