Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Indeksowanie tablic

Ostatnio zmodyfikowano 2017-05-26 21:05
Autor Wiadomość
wokub
Temat założony przez niniejszego użytkownika
Indeksowanie tablic
» 2017-05-26 10:28:48
Cześć,
Mam za zadanie dojść, dlaczego kod:

C/C++
#include <iostream>

int main()
{
    double tablica[ 10 ];
    double x;
    std::cout << & liczba << "\t" << & tablica[ - 1 ] << "\n";
}

wyświetla output:

0x22ff18 0x22ff18

Sprawdzałem, czy to dlatego, że jest -1, ale nie, to po prostu zawsze wyświetla w tym formacie.
W poleceniu jest mowa o niepoprawnym indeksowaniu tablic. Jakby ktoś coś widział w tym kodzie, czego ja nie jestem w stanie, byłbym bardzo wdzięczny.
P-161592
carlosmay
» 2017-05-26 10:43:20
tablica[ - 1 ]
Jest to zwyczajnie UB. Może wyświetlić się wszystko, pod warunkiem, że uda ci się to skompilować.
Odwołanie się do elementu spoza zakresu tablicy jest UB.

edit:
https://wandbox.org/permlink​/E5YmjGaNFfi0ZUvM
Wyłączone ostrzeżenia.
P-161593
michaello94
» 2017-05-26 10:46:19
No tak
P-161594
wokub
Temat założony przez niniejszego użytkownika
» 2017-05-26 10:48:17
Ok, dzięki wielkie. I wszystko jasne. Swoją drogą fajna stronka. A i zamiast liczba miało być x. Po prostu zmieniłem u góry i zapomniałem, u dołu też to zrobić. W końcu output ze znakami xff etc nie do końca jest "liczbą". Znaczy binarnie bodajże jest, ale nie o to mi chodziło :D O i przy okazji mam zadania dot. kompliatorów, to zobaczę różnicę dzięki temu linkowi :D Chwała ci
P-161595
carlosmay
» 2017-05-26 11:13:16
& liczba
Ampersand w obu przypadkach wyświetla adres w pamięci.
0x22ff18
 - system szesnastkowy.
P-161599
pekfos
» 2017-05-26 12:07:23
x ma tu ten sam adres co tablica[-1], najwyraźniej zmienne trafiły na stos w dokładnie tej kolejności, w jakiej są napisane w kodzie. Stos rośnie w kierunku malejących adresów, więc x jest po tablicy, ale adres ma niższy, więc w pamięci jest przed pierwszym elementem tablicy.
P-161603
wokub
Temat założony przez niniejszego użytkownika
» 2017-05-26 18:47:21
A mam jeszcze jedno pytanko. W poleceniu mam, że rezultat jest zależny od kompilatora i mam wytłumaczyć dlaczego, mimo, że praktycznie nie ma różnicy, jakiego użyje na tym wandbox czy u Siebie (MinGW). Czy jest wgl. jakakolwiek różnica? Może ja jestem ślepy. Prawda jest taka, że nie jestem zbyt zaznajomiony w tym systemie szesnastkowym, a to on stanowi output.
P-161616
Kinexity
» 2017-05-26 21:05:28
carlosmay już wcześniej o tym wspomniał - to jest UB i dlatego, wynik działania programu zależy od kompilatora. A jeżeli chodzi o system szesnastkowy - skoro uczysz się programować to radzę go ogarnąć. Nie musisz umieć w nim liczyć, lecz lepiej dla ciebie, że będziesz wiedział jak działa.
P-161629
« 1 »
  Strona 1 z 1