C语言指针问题(新手)

来源:百度知道 编辑:UC知道 时间:2024/06/28 07:59:23
#include<stdio.h>
main()
{
int a[3]={1,2,3},b[3]={4,5,6};
int *sum(int *,int *);
int *p;
p=sum(a,b);
for(;p<p+3;p++)/*这里出错,答案不符合,有时根本没法通过编译,很奇怪,通过编译后运行的答案是错的*/
printf("%d",*p);

printf("\n");
}
int *sum(int a[3],int b[3])
{
int i,c[3];
for(i=0;i<3;i++)
c[i]=a[i]+b[i];
return c;
}


c[]是一个局部变量,等函数运行完毕后,就自动释放掉了,所以,你所返回的是一个野指针!
把c[3]在函数的外头定义就行了!

问题根本不是出在局部变量,什么野指针,返回一个指针有错吗?自己没搞清楚前别吓说.
楼主这里的问题是对循环怎么做没把握好
p<p+3,这个条件是永远成立的,一个地址小与它+3的地址.当然成立.
建议你循环这样做:
int i;
for (i=0; i<3; i++)printf("%d",*(p+i));
这样才是你要的目的,把返回的数组里的3个数打印出来.

#include<stdio.h>
int c[3];
main()
{
int a[3]={1,2,3},b[3]={4,5,6};
int *sum(int *,int *);
int *p, *q;
p=sum(a,b);
q=p+3;
for(;p<q;p++)/*这里出错,答案不符合,有时根本没法通过编译,很奇怪,通过编译后运行的答案是错的*/
printf("%d",*p);

printf("\n");
}
int *sum(int a[3],int b[3])
{
int i;
for(i=0;i<3;i++)
c[i]=a[i]+b[i];
return c;
}

楼上的正确,我来晚了