Implementacja adresow w pamieci

0
#include <stdio.h>

int main(void) {
    char * a = "ab";
    char * b = a + 1;
    printf("a = %p \t b = %p\n", a, b);
    (a > b) ? puts("a > b") : puts("a <= b");
    return 0;
}
  1. Czy kazda implementacja powinna (np w pewnego standardu) wydrukowac a <= b ?
  2. Czy istnieje implementacja ktora adresy przesuwa w strone przeciwna - wtedy wydrukowane a > b ?
5
  1. W tym przypadku - nie tylko powinna, ale musi.
  2. Nie, bo to nie jest zgodne ze standardem.

Natomiast jeśli zrobisz:

#include <stdio.h>

int main(void) {
    char * a = "ab";
    char * b = "b";
    printf("a = %p \t b = %p\n", a, b);
    (a > b) ? puts("a > b") : puts("a <= b");
    return 0;
}

To już nie ma żadnych gwarancji co do wyniku.

1

@hauleth: w sumie chyba nie podkreśliłeś tego odpowiednio. Tutaj również nie ma żadnej gwarancji co zostanie wypisane:

#include <stdio.h>

int main(void) {
    char * a = "ab";
    char * b = "b";
    printf("a = %p \t b = %p\n", a, b);
    (a > b || b >= a) ? puts("prawo wyłączonego środka*") : puts("???");
    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1