2017-05-14 10 views
0

ポインタを使用して2つのint配列の合計を計算するCでプログラムを作成しようとしています。ここで は私が何をしたいの例です。Cでポインタを使用する2つの配列の合計

int a[] = {1,2,3,4} 
int b[] = {1,2,3,4,5,6} 
int c[] = sumArrays(a,b,4,6) 
Output : c = {2,4,6,8,5,6} 

問題は、それが示して、私の出力が異なっている:

Output : c = {2,4,6,8} 

任意のアイデア私が間違って何をしたし、それを修正する方法?ここ は私のコードである:cはintへのポインタであるため

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

int* sumArrays(int *arr1, int *arr2, int dim1,int dim2) 
{ 
    int *ret = NULL; 

    if(dim1<dim2) ret = (int*) malloc(dim2*sizeof(int)); 
    else ret = (int*) malloc(dim1*sizeof(int)); 
    if(ret) 
    { 
     if(dim1<dim2) { 
      int i = 0; 
      for (i = 0;i < dim1;i++) { 
       ret[i] = arr1[i] + arr2[i]; 
      } 
      for (i = dim1; i < dim2;i++) { 
       ret[i]=arr2[i]; 
      } 
     } else { 
      int i = 0; 
      for (i = 0;i < dim2;i++) { 
       ret[i] = arr1[i] + arr2[i]; 
      } 
      for (i = dim2; i < dim1;i++) { 
       ret[i]=arr1[i]; 
      } 
     } 
    } 
    return ret; 
} 


int main() 
{ 
int *a[] = {1,2,3,4}; 
int *b[] = {1,2,3,4,5,6}; 

int *c = sumArrays(a,b,4,6); 
printf("c = "); 
int i; 
for (i = 0; i < sizeof(c); i++) { 
    printf("%d,",c[i]); 
} 
} 
+0

C++にフラグを立ててはいけません。そうでなければ 'std :: vector'を使わなければなりません。 – Jarod42

+0

また、 'int * a []'を 'int a []'に変更する必要があります。 – Shibli

+0

別の注意として、あなたは 'c = {2,4,6,8、}'を得るべきであり、 'c = {2,4,6,8}'ではありません。 – anishsane

答えて

4

SIZEOF Cは常に、64ビット、32ビットシステムのための4及び8を返します。あなたは、ポインタの使用に関する問題を抱えている

for (i = 0; i < 6; i++) { 
+0

それはとても明らかです..ありがとう! – nicoolaslb

0

だから、あなたが書くべき結果の配列を印刷します。

int *a[] = {1,2,3,4};  // a is an array of pointers to integers. 
int *b[] = {1,2,3,4,5,6}; // b is an array of pointers to integers. 

これを行うと、array of pointers to integersと宣言しています。したがって、コンパイルの設定に応じて、コンパイラの警告またはエラーが発生する可能性が最も高くなります。初期化では、ポインタはキャストなしの整数から作成されます。仮引数に実際の引数を渡すと、同様の警告が発生します。あなたのメインは次のようになります。

int main() 
{ 
    int a[] = {1,2,3,4}; 
    int b[] = {1,2,3,4,5,6}; 
    int sizeA = sizeof(a)/sizeof(*a); 
    int sizeB = sizeof(b)/sizeof(*b); 


    int *c = sumArrays(a,b,sizeA,sizeB); 
    printf("c = "); 
    int i; 
    for (i = 0; i < (sizeA < sizeB ? sizeB : sizeA); i++) { 
     printf("%d,",c[i]); 
    } 
}