关于c语言指针和地址问题
定义一个函数:inttiltang(float*x0,float*y0,float*xt,float*yt,intnpoint,float*theta,int*iarea...
定义一个函数: int tiltang(float *x0, float *y0, float *xt, float *yt, int npoint, float * theta, int * iarea, float arealim); int tiltang(float *x0, float *y0, float *xt, float *yt, int npoint, float * theta, int * iarea, float arealim) { ...x0[i]... } 然后在另一个函数调用它时: float x[n],y[n],xs[n],ys[n]; int n,iarea; float thetaf, arealim; tflag = tiltang(x,y,xs,ys,n,&thetaf,&iarea,arealim); 这里前四个变量前为什么不加&,而&thetaf?前四个变量是指向数组的指针吗?怎么可以这么用:x0[i] 还有一个问题我怎么在同一个.c文件里的多个函数共用一个变量,这个变量有个初始值,初始值是访问这个文件时外面输入的,而且所有函数都能改变这个变量值 如何定义一个函数返回一个数组? 具体点,谢谢啦
展开
1个回答
展开全部
针对第一个问题:
&是取地址符号,数据在计算机中存储,有相应的地址能够找到.
数组头部就相当于一个指针,如果float
x[n],那么x代表着数组中的首地址,由于数组在内存占用的是连续存储空间.因此也可以用指针去得到它的数据.
你调用数组的时候,其实也就是传递数组的首地址给函数,那么就不需要&符号了.然而你想传递thetaf,这个thetaf只是个数据,想在函数中改变它的值,那么可以通过得到数据的地址,在地址中改变数据.
第二个问题
同上面回答,可以采用一个全局变量,也就是定义在函数外面的变量,最好在.C文件开始的地方.
第三个问题:
返回一个数组即返回它的首地址就可以了,如果你能够了解到计算机数据在内存中的排列,那么这个概念就非常容易理解.(浮点数和整数一样,在内存中占用4个字节,
#include
<stdio.h>
float
*
SumArray(float
*x,
float
*y,int
len)
{
float
*sum;
int
i
=
0;
for(i=0;i<len;i++)
{
sum[i]
=
x[i]
+
y[i];
//*(sum+i)
=
*(x+i)
+
*(y+i);
}
return
sum;//这里返回的是sum数组的首地址,你可以把sum理解为一个指针的地址,也可以理解为一个数组的首地址.请注意(*sum和sum[0]的地址是一样的,sum是sum[n]的首地址),如果你能区分出这个概念,指针也是小case了.
}
int
main()
{
float
x[10],y[10];
float
*sum;//float
sum[10];
int
i
=
0;
for(i=0;i<10;i++)
{
x[i]
=
i;
y[i]
=
i*10;
printf("%f\t%f\n",x[i],y[i]);
}
sum
=
SumArray(x,y,10);//将返回的传递给sum指针,或者所让sum指向数组返回的地址
for(i=0;i<10;i++)
{
printf("%f\n",sum[i]);
}
printf("%d",sizeof(float));//查看浮点数在电脑中占用的字节
return
0;
}
通过函数,可以返回一个数组,我已经调试通过.你也可以在你的电脑上调试这段程序,加深理解,
PS:如果觉得我的答案能回答你的问题,请采纳,谢谢~
&是取地址符号,数据在计算机中存储,有相应的地址能够找到.
数组头部就相当于一个指针,如果float
x[n],那么x代表着数组中的首地址,由于数组在内存占用的是连续存储空间.因此也可以用指针去得到它的数据.
你调用数组的时候,其实也就是传递数组的首地址给函数,那么就不需要&符号了.然而你想传递thetaf,这个thetaf只是个数据,想在函数中改变它的值,那么可以通过得到数据的地址,在地址中改变数据.
第二个问题
同上面回答,可以采用一个全局变量,也就是定义在函数外面的变量,最好在.C文件开始的地方.
第三个问题:
返回一个数组即返回它的首地址就可以了,如果你能够了解到计算机数据在内存中的排列,那么这个概念就非常容易理解.(浮点数和整数一样,在内存中占用4个字节,
#include
<stdio.h>
float
*
SumArray(float
*x,
float
*y,int
len)
{
float
*sum;
int
i
=
0;
for(i=0;i<len;i++)
{
sum[i]
=
x[i]
+
y[i];
//*(sum+i)
=
*(x+i)
+
*(y+i);
}
return
sum;//这里返回的是sum数组的首地址,你可以把sum理解为一个指针的地址,也可以理解为一个数组的首地址.请注意(*sum和sum[0]的地址是一样的,sum是sum[n]的首地址),如果你能区分出这个概念,指针也是小case了.
}
int
main()
{
float
x[10],y[10];
float
*sum;//float
sum[10];
int
i
=
0;
for(i=0;i<10;i++)
{
x[i]
=
i;
y[i]
=
i*10;
printf("%f\t%f\n",x[i],y[i]);
}
sum
=
SumArray(x,y,10);//将返回的传递给sum指针,或者所让sum指向数组返回的地址
for(i=0;i<10;i++)
{
printf("%f\n",sum[i]);
}
printf("%d",sizeof(float));//查看浮点数在电脑中占用的字节
return
0;
}
通过函数,可以返回一个数组,我已经调试通过.你也可以在你的电脑上调试这段程序,加深理解,
PS:如果觉得我的答案能回答你的问题,请采纳,谢谢~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询