Ich habe über Integer-Zeiger-Subtraktion in C in diesem Thread gelesen: Pointer subtraction confusion, die einfach genug zu erfassen und zu testen war.Char Zeiger Subtraktion in C
Allerdings habe ich versucht, ein ähnliches Szenario mit einem char * zu replizieren, aber die Ergebnisse, die ich bekomme, machten keinen Sinn.
Hier ist das Szenario, das ich versucht:
#include <stdio.h>
#include <string.h>
int main() {
char a_arr[16] = "";
char *a = a_arr;
char b_arr[1] = "";
char *b = b_arr;
printf("\nThe amount by which they differ is: %d\n", a-b);
// a-b = 1, which makes sense since they are 1 char away
return 0;
}
Das nächste, was ich versuchte, ist das, was ich Probleme habe
Verständnis#include <stdio.h>
#include <string.h>
int main() {
char a_arr[16] = "";
char *a = a_arr;
char b_arr[2] = "";
char *b = b_arr;
printf("\nThe amount by which they differ is: %d\n", a-b);
// a-b = 16, which doesn't really make sense to me..
return 0;
}
Meine Vermutung ist, dass es geht einige padding Zeug vom Compiler-Ende, das ich dachte, sollte nicht der Fall sein, da es ein Char-Array ist und keine Ausrichtung erforderlich wäre.
Ich bin mir nicht sicher, warum es 16 Bytes ist .. Irgendwelche Hilfe ich s sehr geschätzt!
Ich habe die folgende Online-Schnittstelle zu kompilieren und dieses Stück Code ausführen: http://www.tutorialspoint.com/compile_c_online.php
Sie rufen undefiniertes Verhalten auf. Beide Zeiger müssen auf das gleiche Array zeigen! (oder genau danach) Was erwarten Sie von zwei völlig unabhängigen Zeigern zu subtrahieren? Was ist "1 Liter minus 2 Sekunden"? – Olaf
@Olaf isn; t das gleiche Ergebnis wie "1 kg minus 2 Meilen"? –
@SouravGhosh mehr wie "1000 Ampere minus 10 Volt" – Olaf