关于数组使用的疑问
题目:把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的地址? #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);
} 回答1:n=5,func函数中 m<n, 所以c->c,明显下标越界了,所以返回的是个随机大数。return c; 这一句改成 return c;
2: func中定义的变量,在func函数运行结束就不存在了,所以不能直接在主函数中得到 c数组的地址。 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]