二进制操作数无效 - (有 '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;
。
根据你的代码,你似乎需要一个动态的整数数组,而不是一个动态的整数指针数组。
我在 运行 程序时遇到问题:
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;
。
根据你的代码,你似乎需要一个动态的整数数组,而不是一个动态的整数指针数组。