关于c语言中的结构体数组作为函数参数传递的

#include<stdio.h>#include<math.h>typedefstruct{intx;inty;}Point;intPointDist(Point);i... #include <stdio.h>
#include <math.h>
typedef struct {int x; int y;} Point;
int PointDist(Point);
int main()
{
Point d[2];
printf("Enter the x value of point1:");
scanf("%d",&d[0].x);
printf("Enter the y value of point1:");
scanf("%d",&d[0].y);
printf("Enter the x value of point2:");
scanf("%d",&d[1].x);
printf("Enter the y value of point2:");
scanf("%d",&d[1].y);
printf("The Euclidean distance between two Points is %lf",PointDist(d[2]));

system("pause");
return 0;
}
int PointDist(Point dot[2])
{
int a,b;

a=(dot[0].x-dot[1].x)+(dot[0].y-dot[1].y);
b=a+1;
return b;
}
运行时发生错误,咋回事啊
展开
 我来答
tattackor
推荐于2017-10-03 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:890万
展开全部

1、结构体数组传给指针,实质上是不可能的,本质上传的是数组首地址,根据偏移来操作数组,这样看起来好像是真在操作数组一样。就和普通指针一样使用,只不过它是结构体数组。
2、例程:

typedef struct Student
{
    char name[10] ;
    int age ;
}Student;
#define LEN 10 
//print all Student infomation
void fun(Student *pStu,int len)
{
    int i ; 
    for(i = 0 ;i < len ;++i)
    {
        printf("%s\t%d",pStu[i].name,pStu[i].age) ;
    }
}
int main ()
{
    Student stu[LEN] ;
    fun(stu,LEN) ;
    
}
x_iam
2013-12-12 · TA获得超过180个赞
知道小有建树答主
回答量:252
采纳率:100%
帮助的人:211万
展开全部
printf("The Euclidean distance between two Points is %lf",PointDist(d[2]));

这一行有问题,你直接把d[2]作为参数传递过去了,d[2]是一个Point类型,而函数的形参是指针类型,所以会报错。要做的就是改成printf("The Euclidean distance between two Points is %lf",PointDist(d));就好。
追问
没有报错,而是运行后出现什么冲突(我是小白),不过照您说的改后就报错了,所以还需要怎样改呢,谢谢你热情的回答
追答
int PointDist(Point);这句改成int PointDist(Point dot[])

int PointDist(Point dot[2])这句改成int PointDist(Point dot[])

整个改成这样:
#include
#include
typedef struct {int x; int y;} Point;
int PointDist(Point dot[]);
int main()
{
Point d[2];
printf("Enter the x value of point1:");
scanf("%d",&d[0].x);
printf("Enter the y value of point1:");
scanf("%d",&d[0].y);
printf("Enter the x value of point2:");
scanf("%d",&d[1].x);
printf("Enter the y value of point2:");
scanf("%d",&d[1].y);
printf("The Euclidean distance between two Points is %lf",PointDist(d));

system("pause");
return 0;
}
int PointDist(Point dot[])
{
int a,b;

a=(dot[0].x-dot[1].x)+(dot[0].y-dot[1].y);
b=a+1;
return b;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
雨吻月
2013-12-12 · TA获得超过384个赞
知道小有建树答主
回答量:394
采纳率:0%
帮助的人:192万
展开全部
printf("The Euclidean distance between two Points is %lf",PointDist(d[2]));

输出格式是%lf, 而PointDist(Point)的返回值是int型的。

还有PointDist()是求两点见的距离吗?似乎公式不对呀?

坐标最好使用float型数据,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tianyuwuse
2013-12-21 · TA获得超过1117个赞
知道小有建树答主
回答量:494
采纳率:100%
帮助的人:241万
展开全部
楼主朋友,你的程序有问题的几个地方是:
1、参数传递不对,因为你的函数定义时的形参为 以Point 为基类型的指针,而在函数声明和调用中你用的是Point 类型变量;
2、函数的返回值类型和你最后输出的时候的数据格式说明符不符,因此出现了你所说的错误。
修改如下就没问题了
#include <stdio.h>
#include <math.h>
typedef struct {int x; int y;} Point;
int PointDist(Point *);
int main()
{
Point d[2];
printf("Enter the x value of point1:"); scanf("%d",&d[0].x);
printf("Enter the y value of point1:"); scanf("%d",&d[0].y);
printf("Enter the x value of point2:"); scanf("%d",&d[1].x);
printf("Enter the y value of point2:"); scanf("%d",&d[1].y);
printf("The Euclidean distance between two Points is %d\n",PointDist(d)); //把lf改成 d
system("pause");
return 0;
}
int PointDist(Point dot[2]) //实际上如果不修改上面的lf时可以把此处以及函数声明中
//的int改成double
{
int a,b;
a=(dot[0].x-dot[1].x)+(dot[0].y-dot[1].y);
b=a+1;
return b;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式