二进制操作数无效 - (有 'int' 和 'int *')

Invalid operands to binary - (have 'int' and 'int *')

我在 运行 程序时遇到问题:

invalid operands to binary - (have 'int' and 'int *')

因为我定义了一个动态数组 **engelCikacagiYer 然后我尝试对 karakterHP

进行操作
int karakterHP = 100;

int **engelCikacagiYer;

engelCikacagiYer = malloc(engelSayisi * sizeof(int));

for(i = 0; i < engelSayisi; i++){
    engelCikacagiYer[i] = (rand() % (100 - 5 + 1) + 5);
}

for(i = parkurUzunlugu.Baslangic; i < parkurUzunlugu.Bitis; i++){
    if (asal(engelCikacagiYer)) {
        karakterHP -= engelCikacagiYer[i];
        printf("%d\t", karakterHP);
    }
}

这段代码:

int **engelCikacagiYer;

engelCikacagiYer = malloc(engelSayisi*sizeof(int));

不正确,要将内存分配给双指针,也就是指向指针的指针,您需要使用它指向的大小进行分配,即指向 int 的指针,因此您需要:

engelCikacagiYer = malloc(engelSayisi*sizeof(int*));

或者更好:

engelCikacagiYer = malloc(engelSayisi*sizeof(*engelCikacagiYer));

稍后您尝试将 int 值分配给 engelCikacagiYer[i],这是一个指针变量而不是 int 变量,因此出现错误。

如果你真的需要一个双指针,在第一个 malloc 之后你需要为每个 engelCikacagiYer[i] 指针分配内存:

for(int i = 0; i < engelSayisi; i++){
    engelCikacagiYer[i] = malloc(sizeof(**engelCikacagiYer));
}

并像二维数组一样赋值(我的意思是使用相同的表示法),示例:

engelCikacagiYer[i][0] = (rand()%(100-5+1)+5);

*engelCikacagiYer[i] = (rand()%(100-5+1)+5);

这是正确分配的简化可能实现:

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

int main()
{
    int **engelCikacagiYer;

    engelCikacagiYer = malloc(100 * sizeof(*engelCikacagiYer)); //check allocation for errors

    for(int i = 0; i < 100; i++){
        engelCikacagiYer[i] = malloc(sizeof(**engelCikacagiYer)); //check allocation
        *engelCikacagiYer[i] = (rand() % (100 - 5 + 1) + 5);
    }

    for (int i = 0; i < 100; i++) //test print
    {
        printf("%d ", *engelCikacagiYer[i]);
    }
}

无论如何,对于您使用指向 int 的单个指针呈现的代码,这也是一个有效(且更简单)的解决方案。

int **engelCikacagiYer; 更改为 int *engelCikacagiYer;

根据你的代码,你似乎需要一个动态的整数数组,而不是一个动态的整数指针数组。