Ich habe 2 Zeiger auf einige Punktstrukturen. Ich wollte Abstand zwischen 2 Punkten berechnen (i brauchen nicht Wurzel davon berechnen), so habe ich diese:Seltsame printf Gleichung
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);
Input: X [l] = (0,1), X [l + 1] = (2,0) Ausgabe: --TEST 0 2 -1
Warum ist das? Edit:
Dies war Teil Funktion finden, die zwischen ihnen mit dem kleinsten Abstand 2 Punkte findet. Hauptsächlich habe ich das:
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);
Ich habe Quicksort überprüft, es funktioniert wie es sollte. Funktion m: #define m (a) ((a) * (a)) Nur Funktion finden haben Fehler in diesem Teil. Das funktioniert, aber ich möchte keine Variablen für jede Koordinate machen.
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);
Eingang: 2 Punkte (0,1) (2,0) Ausgang: --test 0 2 -1 -2
Können Sie etwas mehr Kontext zu machen? Wo sind 'w' und' X' definiert? Woher weißt du, dass die Werte in dem Array sind, was du denkst, sie sind? – templatetypedef
Meine Vermutung ist: ** Undefiniertes Verhalten **! Wenn Sie die fraglichen Typen bereitstellen und etwas mehr Platz in Ihrem Code verwenden, ist es möglicherweise einfacher, sie zu erkennen. – pmg
Lernen Sie bitte, Leerzeichen (und bessere Variablennamen) zu verwenden. – jamesdlin