使用C中的指针的两个数组的总和

nic*_*slb 1 c arrays pointers sum

我试图在C中创建一个程序,使用指针计算两个int数组的总和.这是我想要做的一个例子:

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}
Run Code Online (Sandbox Code Playgroud)

问题是我的输出不同,它显示:

Output : c = {2,4,6,8}
Run Code Online (Sandbox Code Playgroud)

知道我做错了什么以及如何纠正它?这是我的代码:

#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]);
} 
}
Run Code Online (Sandbox Code Playgroud)

And*_*kyy 5

对于32位系统,sizeof c将始终返回4,对于64位系统,则返回8,因为c是指向int的指针.

所以要打印结果数组,你应该写:

for (i = 0; i < 6; i++) {
Run Code Online (Sandbox Code Playgroud)