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

Dlaczego ujemne indeksy tablicy działają

Ostatnio zmodyfikowano 2021-08-16 12:48
Autor Wiadomość
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.  



C/C++
#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();
}
P-178838
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.
P-178839
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).
P-178840
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.
P-178842
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.
P-178843
krystian123456
Temat założony przez niniejszego użytkownika
» 2021-08-16 12:48:12
Teraz rozumiem. Dziękuje za pomoc
P-178844
« 1 »
  Strona 1 z 1