You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言编译报错invalid operands to binary + (int*和int*)如何解决

报错触发原因

你代码中int *tab [2001];的声明定义的是长度为2001的int指针数组,每个元素的类型为int *(整型指针),而非普通整型数值。
C语言语法本身确实禁止两个指针直接执行加法运算(仅支持指针与整数的加减运算),你在sum计算行对两个int *类型的元素做加法,就触发了该类型不匹配的报错。
同时你的代码还存在两处隐藏问题:

  • 把atoi返回的int类型值直接赋值给int *类型的数组成员,本身属于类型不匹配的错误操作
  • tab[2001] = 0属于数组越界访问:长度为2001的数组合法下标范围是0~2000,下标2001超出了数组的内存边界
修复方法
  • 修改数组声明:将int *tab [2001];替换为int tab[2001];,直接声明为存储整型数值的数组,即可正常执行加法运算
  • 删除越界赋值行tab[2001] = 0;,如果确实需要在数组末尾加结束标记,可以改为tab[2000] = 0;
  • 可选优化:增加文件打开失败的判空逻辑,避免输入文件不存在时触发空指针崩溃

修复后完整代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    FILE *flot = fopen("input.txt","r");
    // 判空逻辑避免空指针崩溃
    if (flot == NULL) {
        perror("打开input.txt失败");
        return 1;
    }
    // 改为普通int类型数组
    int tab [2001];
    char k[255];
    int i=0;
    while (fscanf(flot, "%s", k) != EOF)
    {
        int b = atoi(k);
        tab[i]=b;
        i++;
    }
    int nb = 0;
    for(int i=0;i<1998;i+=3)
    {
        int sum1 = tab[i]+tab[i+1]+tab[i+2];
        int sum2 = tab[i+3]+tab[i+4]+tab[i+5];
        if(sum2>sum1)
            nb++;
    }
    printf("%i", nb);
    fclose(flot);
    return 0;
}

内容的提问来源于stack exchange,提问作者CCtuhulu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:24:03