Dlaczego ujemne indeksy tablicy działają
Ostatnio zmodyfikowano 2021-08-16 12:48
krystian123456 Temat założony przez niniejszego użytkownika |
Dlaczego ujemne indeksy tablicy działają » 2021-08-16 11:10:23 Czemu jest tu dozwolony indeks ujemny? W Qt wszystko jest wyświetlane dobrze i pokazuje tylko ostrzeżenie. W Visual Studio 2019, dwie zmienne są z ujemnym indeksem są już źle wyświetlane. Czy takie coś jest dozwolone, widziałem użycie indeksu ujemnego podczas tworzenia stosu i dlatego mnie zaciekawił temat ujemnych indeksów w tablicach, wcześniej myślałem że nie są dozwolone. #include <QCoreApplication> #include <iostream>
using namespace std;
int main( int argc, char * argv[ ] ) { QCoreApplication a( argc, argv ); int tab[ 5 ]; tab[ - 4 ] = 5; tab[ - 3 ] = 8; tab[ - 2 ] = 9; tab[ - 1 ] = 1; tab[ 0 ] = 3; tab[ 1 ] = 56; tab[ 2 ] = 76; tab[ 3 ] = 674; tab[ 4 ] = 923; for( int m = - 4; m <= 4; m++ ) { cout << tab[ m ] << endl; } cout << endl; int * j = tab; for( int o = 0; o <= 9; o++ ) { cout << *( j - 4 ) << endl; j++; } return a.exec(); }
|
|
nanoant20 |
» 2021-08-16 12:21:08 Dlaczego ujemne indeksy tablicy działają Nie działają jest to niezdefiniowane zachowanie. Index jest poza granicami tablicy. |
|
DejaVu |
» 2021-08-16 12:22:11 Tablice numerowane są zawsze od zera. Jak chcesz mieć 'coś' do przeszukiwania to możesz użyć std::set (czy element istnieje) lub std::map (jaka wartość jest pod danym kluczem). |
|
krystian123456 Temat założony przez niniejszego użytkownika |
» 2021-08-16 12:43:07 A czemu się to w ogóle wyświetla? Wyświetla się poprawnie ale adresy komórek RAM są jakieś pomieszane.
|
|
DejaVu |
» 2021-08-16 12:45:52 Undefined behavior oznacza tyle: 'kod się skompilować może, ale wyniki działania są nieoczkiwane, ponieważ standard nie opisuje jak powinno być to zaimplementowane'. Innymi słowy: używając negatywnych indeksów możesz wyjść poza zakres pamięci i modyfikować pamięć innych zmiennych, a nawet chyba kodu wykonywalnego. |
|
krystian123456 Temat założony przez niniejszego użytkownika |
» 2021-08-16 12:48:12 Teraz rozumiem. Dziękuje za pomoc |
|
« 1 » |