【问题标题】:Sum of two arrays using pointers in C使用C中的指针对两个数组求和
【发布时间】:2017-05-14 16:16:25
【问题描述】:

我正在尝试在 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}

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

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

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

#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]);
} 
}

【问题讨论】:

  • 不要标记 C++,否则你将不得不使用std::vector
  • 你还需要把int *a[]改成int a[]
  • 另一方面,你应该得到c = {2,4,6,8,},而不是c = {2,4,6,8}
  • 顺便说一句,代码不正确。它可能导致未定义的行为。您在函数内部分配一些内存,当您超出其范围时,谁知道呢。永远不要这样做

标签: c arrays pointers sum


【解决方案1】:

Sizeof c 对于 32 位系统总是返回 4,对于 64 位系统总是返回 8,因为 c 是一个指向 int 的指针。

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

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

【讨论】:

  • 这很明显.. 谢谢!
【解决方案2】:

您在使用指针时遇到问题。

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]);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-16
    • 2021-04-30
    • 2015-02-07
    • 2018-06-23
    • 1970-01-01
    • 2023-03-11
    • 2018-01-04
    • 2022-01-03
    相关资源
    最近更新 更多