online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code    Language
// Uwaga: najpierw zapoznaj się z regułą 'prawo-lewo' określania typów zmiennych. #include <iostream> #include <typeinfo> using namespace std; void f ( int t [] , int* p ) { cout << "Funkcja F: " << sizeof( t ) << " " << sizeof( p ) << " " << typeid( t ).name() << endl; } void g ( int t [10] , int* p ) // t pełni rolę tablicy, ale jest przekazywana przez wskaźnik, więc bez informacji o rozmiarze { cout << "Funkcja G: " << sizeof( t ) << " " << sizeof( p ) << " " << typeid( t ).name() <<endl; } void h( int (*t) [10], int** p ) // t jest wskaźnikiem na tablicę 10-elementową. Wówczas *t jest tą tablicą. Rozmiar jest pamiętany. { cout << "Funkcja H: " << sizeof( *t ) << " " << sizeof( *p ) << " " << typeid( t ).name() <<endl; } void r( int (&t) [10], int* (&p) ) // t i p to referencje na: tablicę 10-elementową i wskaźnik do niej { cout << "Funkcja R: " << sizeof( t ) << " " << sizeof( p ) << " " << typeid( t ).name() <<endl; } int main () { int t[ 10 ] ; for (int i = 0; i < 10 ; i++) t[i] = i; int* p = t; cout << "Main: " << sizeof( t ) << " " << sizeof( p ) << " " << typeid( t ).name() << endl; f ( t , p ); // Tablica przekazana, ale rozmiar zostanie zapomniany g ( t , p ); // Tablica przekazana, ale rozmiar zostanie zapomniany h ( &t , &p ); // Rozmiar tablicy przekazany dobrze - mechanizmem wskaźników r ( t , p ); // Rozmiar tablicy przekazany dobrze - mechanizmem referencji /* Konstrukcja 1 : Tablica 10 wskaznikow, kazdy trzyma adres i-tego elementu tablicy t */ cout << endl << "Konstrukcja 1: tablica zawierająca adresy elementów tablicy t: " << endl; int* m [10]; // m jest tablicą, której elementami będą adresy elementów t. for (int i = 0; i < sizeof(m) / sizeof(m[0]) ; i++) { t[i] = i; m[i] = &t[i] ; // Tu przypisujemy adres kolejnego elementu cout << *m[i] << " " ; // Tak działamy na wartościach } cout << endl << "sizeof (m) = " << sizeof (m) << endl; // 80, nie 40. Widać, że to tablica wskaźników. /* Konstrukcja 2 : Wskaznik na tablicę 10 intów */ cout << endl << "Konstrukcja 2: " << endl; int (*k) [10]; // k jest wskaznikiem na tablicę 10 elementów int k = &t ; for (int i = 0; i < sizeof(*k) / sizeof( (*k) [0] ) ; i++) { cout << (*k) [i] << " " ; // Tak działamy na wartościach } cout << endl << "sizeof (*k) = " << sizeof (*k) << endl; /* Konstrukcja 3 : Referencja na tablicę 10 intów */ cout << endl << "Konstrukcja 3: " << endl; int (&r) [10] = t; // k jest referencją na tablicę 10 elementów int for (int i = 0; i < sizeof (r) / sizeof( r[0] ) ; i++) { cout << r[i] << " " ; // Tak działamy na wartościach } cout << endl << "sizeof (r) = " << sizeof (r) << endl; return 0; }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue