我有2个指向某些Point结构的指针。我想计算2点之间的距离(我不需要计算它的根)所以我有这个:
w[0]=X[l];
w[1]=X[l+1];
d=m(w[0]->x-w[1]->x)+m(w[0]->y-w[1]->y);
printf("--TEST %d %d %d\n",w[0]->x,w[1]->x,w[0]->x-w[1]->x);
输入:X [l] =(0,1),X [l + 1] =(2,0) 输出: - 测试0 2 -1
为什么? 编辑:
这是函数查找的一部分,它找到了两个点之间距离最小的点。在主要我有这个:
X=(Punkt**)malloc(sizeof(Punkt*)*n);
Y=(Punkt*)malloc(sizeof(Punkt)*n);
int x,y;
for(int i=0;i<n;++i) {
scanf("%d %d",&x,&y);
Y[i].x=x;
Y[i].y=y;
X[i]=(Punkt*)malloc(sizeof(Punkt*));
X[i]=&Y[i];
}
Quicksort(X,0,n-1);
Punkt **wynik=find(0,n-1);
printf("%d %d\n%d %d",wynik[0]->x,wynik[0]->y,wynik[1]->x,wynik[1]->y);
我已经检查过Quicksort,它可以正常工作。函数m:#define m(a)((a)*(a)) 只有查找功能在该部分有bug。这有效,但我不想为每个坐标创建变量。
int trash1=w[0]->x;
int trash2=w[1]->x;
printf("--TEST %d %d %d\n",w[0]->x,w[1]->x,w[0]->x-w[1]->x,trash1-trash2);
输入:2分(0,1)(2,0) 输出: - 测试0 2 -1 -2
答案 0 :(得分:2)
我正在尝试重现您的体验。使用这个我得到0 - 2 = - 2
作为结果:
(换句话说,无法重现。)
#include <stdio.h>
#include <stdlib.h>
#define m(a) ((a)*(a))
typedef struct pkt {
int x;
int y;
} Punkt;
int main(void)
{
Punkt **X;
Punkt *Y;
Punkt *w[2];
int x, y;
int n = 2;
int i;
X = malloc(sizeof(Punkt*) * n);
Y = malloc(sizeof(Punkt) * n);
printf("Enter 2 integer point pairs: ");
for(i = 0; i < n; ++i) {
scanf("%d %d", &x, &y);
Y[i].x = x;
Y[i].y = y;
X[i] = &Y[i];
}
i = 0;
w[0] = X[i];
w[1] = X[i + 1];
i = m(w[0]->x - w[1]->x) + m(w[0]->y - w[1]->y);
printf("D: m(%d - %d) + m(%d - %d) = "
"%d + %d = "
"%d\n",
w[0]->x, w[1]->x, w[0]->y, w[1]->y,
m(w[0]->x - w[1]->x), m(w[0]->y - w[1]->y),
i);
printf("TEST: %d - %d = %d\n",
w[0]->x,
w[1]->x,
w[0]->x - w[1]->x);
free(X);
free(Y);
return 0;
}
样品:
$ ./pq
Enter 2 integer point pairs: 0 1 2 0
D: m(0 - 2) + m(1 - 0) = 4 + 1 = 5
TEST: 0 - 2 = -2