在C语言中添加二进制数

在C语言中添加二进制数,c,arrays,pointers,binary,C,Arrays,Pointers,Binary,我得到的错误无效操作数二进制+有int*和int*我不知道为什么它会抛出这个错误。如何添加这两个数组的数组元素。注意两个数组的大小相同 int* complement2_add(int* first_complement2[], int* second_compelment[], int size){ int count = 0,remainder = 0, carryover = 0; int* cAdd = (int*)malloc(size*sizeof(int)); for(cou

我得到的错误无效操作数二进制+有int*和int*我不知道为什么它会抛出这个错误。如何添加这两个数组的数组元素。注意两个数组的大小相同

int* complement2_add(int* first_complement2[], int* second_compelment[], int size){
int count = 0,remainder = 0, carryover = 0;

int* cAdd = (int*)malloc(size*sizeof(int));


for(count = size-1; count >= 0; count--){
    remainder = first_complement2[count] + second_compelment[count] + carryover;

    if(remainder == 1){
        cAdd[count] = 1;
        carryover = 0;
    }
    else if(remainder == 2){
        cAdd[count] = 0;
        carryover = 1;
    }
    else if(remainder == 3){
        cAdd[count] = 1;
        carryover = 1;
    }
    else if(remainder == 0){
        cAdd[count] =0;
        carryover = 0;
    }

}
if(carryover == 1){
    cAdd[count] = 1;
}
return cAdd;

}
然后我调用main中的函数,如下所示

    int* add1 = complement_2_add(complement2Array1, complement2Array2, j);
补足2Array1和补足2Array2的定义相同

int* complement2Array1 = signed2complement2(signedIntArray1, j);
签名的2完整项2定义为

int* signed2complement2(int signed_binary[], int size){
  int i = 0;
  int* complemt2Array = (int*)malloc(size*sizeof(int));
  int flipflag = 0;
  for(i = size-1; i>=0;i-- ){
    if(flipflag == 0){
        complemt2Array[i] = signed_binary[i];
        if(signed_binary[i] == 1){
            flipflag = 1;
        }
    }
    else{
        complemt2Array[i] = signed_binary[i] == 0?1:0;
    }
  }
  return complemt2Array;
}
在第一个补码2[count]中,第二个补码[count]都是整数指针

因为第一个_补码和第二个_补码都是整数指针数组

您需要在添加之前取消对它们的引用-

remainder = (*first_complement2[count]) + (*second_compelment[count]) + carryover;
编辑 将int*传递给需要整数指针数组或int**的函数时,您没有收到任何警告或错误吗

complement2Array1和complement2array2必须是int**类型或int指针数组

或者像@alk Sir建议的那样简单,使用int*代替int**

这个

int* complement2_add(int* first_complement2[], int* second_compelment[], int size){
如果等于

int* complement2_add(int ** first_complement2, int ** second_compelment, int size){
从你使用第一个补语2和第二个补语2的方式来看,你称之为补语2的方式是错误的

看来你想要

int* complement2_add(int * first_complement2, int * second_compelment, int size){
在使用之前,还要将原型添加到其中:

int* complement2_add(int * first_complement2, int * second_compelment, int size);

... somefunc(...)
{
  ...

   int* add1 = complement_2_add(complement2Array1, complement2Array2, j);

   ...
}

int* complement2_add(int* first_complement2, int* second_compelment, int size)
{
  int count = 0,remainder = 0, carryover = 0;
  ...

使用数组的数组。因此,int*first\u complement2[]是错误的,它应该类似于int*first\u complement2函数应该做的是添加2个以数组形式存在的二进制数。您可以将数组作为int*first\u complement2传递给此函数。只需将函数签名更改为int*complement2\u addint*first\u complement2,int*second\u complement,int sizeYou还想告诉我们如何调用complement2\u add,传递到什么以及如何定义后者。二进制操作数+与标题中的二进制数几乎没有任何关系。好的,这样可以阻止错误发生,但是当我在main方法中使用函数并尝试将其返回值赋给变量时,它会给我一个错误。我就是这样分配它的int*add1=补语2加补语2Array1,补语2Array2,j@Thorx99现在你有一个不同的错误。请将调用函数与所有声明一起发布。给我一个错误是最不可用的错误报告@Thorx99@ameyCU初始化从整数生成指针,无需强制转换和隐式函数声明。因此,在使用之前,请添加complement2_add的原型@Thorx99
int* complement2_add(int * first_complement2, int * second_compelment, int size){
int* complement2_add(int * first_complement2, int * second_compelment, int size);

... somefunc(...)
{
  ...

   int* add1 = complement_2_add(complement2Array1, complement2Array2, j);

   ...
}

int* complement2_add(int* first_complement2, int* second_compelment, int size)
{
  int count = 0,remainder = 0, carryover = 0;
  ...