咸鱼章一 发表于 2020-2-16 16:14:21

关于数组使用的疑问

题目:把a数组的n个数的平方值,与b数组中逆序的n个数的平方值一一对应相加,存放在c数组中。

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

int func(int *a,int *b,int n)
{
        int m,*c;
        c=(int *)malloc(n*sizeof(int));
        for(m=0;m<n;m++)
        {
                c=(a)*(a)+(b)*(b);
                //printf("debug:a[%d]=%d,b[%d]=%d\n",m,a,n-m-1,b);
        }
        for(m=0;m<n;m++)
        {
                printf("%d ",c);
        }
        free(c);
        return c;
}

int main()
{
        int a={0,1,2,3,4,5,6,7,8,9},
                b={4,3,2,1,0},
                n=5;
        int res=func(a,b,n);
        printf("%d",res);
}

运行后c打印的结果正确,但是main函数最后res的打印结果是-572662307。
疑问如下:
1. 这里res的值为什么不等于c?
2. 如果要在main函数中打印数组c的每个元素,怎么传回c的地址?

人造人 发表于 2020-2-16 16:34:18

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

int func(int *a,int *b,int n)
{
      int m,*c;
      c=(int *)malloc(n*sizeof(int));
      for(m=0;m<n;m++)
      {
                c=(a)*(a)+(b)*(b);
                //printf("debug:a[%d]=%d,b[%d]=%d\n",m,a,n-m-1,b);
      }
      for(m=0;m<n;m++)
      {
                printf("%d ",c);
      }
       
        int res = c;
      free(c);
      return res;
}

int main()
{
      int a={0,1,2,3,4,5,6,7,8,9},
                b={4,3,2,1,0},
                n=5;
      int res=func(a,b,n);
      printf("%d",res);
}

chxchxkkk 发表于 2020-2-16 18:13:45

回答1:n=5,func函数中 m<n, 所以c->c,明显下标越界了,所以返回的是个随机大数。return c; 这一句改成 return c;
      2: func中定义的变量,在func函数运行结束就不存在了,所以不能直接在主函数中得到 c数组的地址。

小笨笨难得糊涂 发表于 2020-2-16 23:07:44

1. 这里res的值为什么不等于c?
return c在结束是c ,越界了,要改成return c;
2. 如果要在main函数中打印数组c的每个元素,怎么传回c的地址?
可以将*c定义成全局变量。那么你在main函数里也能使用了。

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

int n;
int *c;
int func(int *a,int *b,int n)
{
      int m;
      c=(int *)malloc(n*sizeof(int));
      for(m=0;m<n;m++)
      {
                c=(a)*(a)+(b)*(b);
                //printf("debug:a[%d]=%d,b[%d]=%d\n",m,a,n-m-1,b);
      }
         for(m=0;m<n;m++)
      {
                printf("%d ",c);
       }
       free(c);
       return c;
}
int main()
{
      int a={0,1,2,3,4,5,6,7,8,9},
               b={4,3,2,1,0};
                n=5;
      int res=func(a,b,n);
      printf("%d\n",res);
      printf("%d",*(c+4));
}
页: [1]
查看完整版本: 关于数组使用的疑问