【发布时间】:2012-03-31 18:04:20
【问题描述】:
我有 2 个指向某些 Point 结构的指针。我想计算两点之间的距离(我不需要计算它的根)所以我有这个:
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) 输出:--TEST 0 2 -1
这是为什么呢? 编辑:
这是 find 函数的一部分,它找到两个点之间距离最小的点。主要是我有这个:
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);
我检查了快速排序,它可以正常工作。函数 m: #define m(a) ((a)*(a)) 只有 find 函数在那部分有错误。这可行,但我不想为每个坐标创建变量。
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) 输出:--TEST 0 2 -1 -2
【问题讨论】:
-
你能提供更多的上下文吗?
w和X在哪里定义?你怎么知道数组中的值就是你认为的那样? -
我的猜测是:未定义的行为!如果您提供有问题的类型并在代码中使用更多空间,则可能更容易发现。
-
请学习使用空格(以及更好的变量名)。
-
您能否向我们展示
m函数并告诉我们您没有以任何方式更改传入的变量? -
你打错了:
printf("--TEST %d %d %d\n",w[0]->x,w[1]->x,w[0]->x-w[1]->x,trash1-trash2);你有 3 个格式说明符,你正在打印四个值