C语言 binary /的操作数无效(有'int *'和'int')?

mbskvtky  于 2023-08-03  发布在  其他
关注(0)|答案(4)|浏览(209)

每次我尝试这个:

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 *,但没有成功。这里到底发生了什么

50few1ms

50few1ms1#

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

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

字符串

t3psigkw

t3psigkw2#

参数integer不是int对象;它是一个int*对象,即指针。(integer是指针对象的一个误导性名称。
如果您更改:

int digit1=integer/10000;

字符串

int digit1 = *integer / 10000;


并对代码的其余部分进行相应的更改,它至少可以编译。integer是指针; *integer是它指向的int对象。
(Also,二进制运算符周围的空格将使代码更易于阅读。另一个使用空白的好理由是,如果除法被反转,那么:

int digit1=10000/*integer;


将引入/* ... */注解。)

m0rkklqb

m0rkklqb3#

这里的问题是integer的类型是int *,这是一个不支持/%运算符的指针。你的问题有两个解决方案。
1.解引用integer,每次使用*运算符执行算术运算时都使用它。
例如int digit1=(*integer)/10000;
1.将integer更改为类型int。您必须更改函数的签名,并且scanf必须更改为使用&运算符scanf("%i",&integer);

sr4lhrrt

sr4lhrrt4#

我们可以通过解引用来添加整数指针来执行操作,即通过添加* pointer
在解引用之后,我们实际上要做的是访问指针所指向的值。
int a = 10; int *ptr = &a;
ptr将具有变量a的地址,而*ptr将具有存储在a中的值。

相关问题