鱼C论坛

 找回密码
 立即注册
查看: 1243|回复: 3

[已解决]关于数组使用的疑问

[复制链接]
发表于 2020-2-16 16:14:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

  3. int func(int *a,int *b,int n)
  4. {
  5.         int m,*c;
  6.         c=(int *)malloc(n*sizeof(int));
  7.         for(m=0;m<n;m++)
  8.         {
  9.                 c[m]=(a[m])*(a[m])+(b[n-m-1])*(b[n-m-1]);
  10.                 //printf("debug:a[%d]=%d,b[%d]=%d\n",m,a[m],n-m-1,b[n-m-1]);
  11.         }
  12.         for(m=0;m<n;m++)
  13.         {
  14.                 printf("%d ",c[m]);
  15.         }
  16.         free(c);
  17.         return c[m];
  18. }

  19. int main()
  20. {
  21.         int a[10]={0,1,2,3,4,5,6,7,8,9},
  22.                 b[5]={4,3,2,1,0},
  23.                 n=5;
  24.         int res=func(a,b,n);
  25.         printf("%d",res);
  26. }
复制代码


运行后c[m]打印的结果正确,但是main函数最后res的打印结果是-572662307。
疑问如下:
1. 这里res的值为什么不等于c[5]?
2. 如果要在main函数中打印数组c的每个元素,怎么传回c的地址?
最佳答案
2020-2-16 23:07:44
1. 这里res的值为什么不等于c[5]?
return c[m]在结束是c[n] ,越界了,要改成return c[m-1];
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[m]=(a[m])*(a[m])+(b[n-m-1])*(b[n-m-1]);
                //printf("debug:a[%d]=%d,b[%d]=%d\n",m,a[m],n-m-1,b[n-m-1]);
        }
         for(m=0;m<n;m++)
        {
                printf("%d ",c[m]);
       }
       free(c);
       return c[m-1];
}
int main()
{
        int a[10]={0,1,2,3,4,5,6,7,8,9},
               b[5]={4,3,2,1,0};
                n=5;
        int res=func(a,b,n);
        printf("%d\n",res);
        printf("%d",*(c+4));
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-16 16:34:18 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int func(int *a,int *b,int n)
  4. {
  5.         int m,*c;
  6.         c=(int *)malloc(n*sizeof(int));
  7.         for(m=0;m<n;m++)
  8.         {
  9.                 c[m]=(a[m])*(a[m])+(b[n-m-1])*(b[n-m-1]);
  10.                 //printf("debug:a[%d]=%d,b[%d]=%d\n",m,a[m],n-m-1,b[n-m-1]);
  11.         }
  12.         for(m=0;m<n;m++)
  13.         {
  14.                 printf("%d ",c[m]);
  15.         }
  16.        
  17.         int res = c[m];
  18.         free(c);
  19.         return res;
  20. }

  21. int main()
  22. {
  23.         int a[10]={0,1,2,3,4,5,6,7,8,9},
  24.                 b[5]={4,3,2,1,0},
  25.                 n=5;
  26.         int res=func(a,b,n);
  27.         printf("%d",res);
  28. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-16 18:13:45 | 显示全部楼层
回答1:n=5,func函数中 m<n, 所以c[m]->c[5],明显下标越界了,所以返回的是个随机大数。return c[m]; 这一句改成 return c[m-1];
      2: func中定义的变量,在func函数运行结束就不存在了,所以不能直接在主函数中得到 c数组的地址。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-16 23:07:44 | 显示全部楼层    本楼为最佳答案   
1. 这里res的值为什么不等于c[5]?
return c[m]在结束是c[n] ,越界了,要改成return c[m-1];
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[m]=(a[m])*(a[m])+(b[n-m-1])*(b[n-m-1]);
                //printf("debug:a[%d]=%d,b[%d]=%d\n",m,a[m],n-m-1,b[n-m-1]);
        }
         for(m=0;m<n;m++)
        {
                printf("%d ",c[m]);
       }
       free(c);
       return c[m-1];
}
int main()
{
        int a[10]={0,1,2,3,4,5,6,7,8,9},
               b[5]={4,3,2,1,0};
                n=5;
        int res=func(a,b,n);
        printf("%d\n",res);
        printf("%d",*(c+4));
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-10 20:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表