#include <iostream>

int main()
{
    // Mindhárom deklaráció egy-egy tömböt hoz létre a program területén
    // minden elemt olvashatunk és írhatunk is:
    char t1[] = {'H','e','l','l','o','\0'};
    char t2[] = "Hello";
    char t3[] = "Hello";

    // Két pointer deklaráció a program területén lefoglalva
    // a pointereket olvashatjuk és írhatjuk
    // ...és...
    // a "Hello" literál lefoglalása (valószínűleg) csak olvasható módon 
    char  *s1 = "Hello";    // s1 a 'H'-ra mutat
    char  *s2 = "Hello";    // s2 is valószínűleg ugyanoda mutat   

    void  *v1 = t1, *v2 = t2, *v3 = t3, *v4 = s1, *v5 = s2;
    std::cout <<v1<<'\t'<<v2<<'\t'<<v3<<'\t'<<v4<<'\t'<<v5<<std::endl;
    // eredmény (v1, v2 v3 különbözőek, v4 és v5 valószínűleg ugyanaz):
    0xbffff460   0xbffff450    0xbffff440   0x8048844   0x8048844

    // tömbök elemeinek értékadása:
    *t1 = 'x'; *t2 = 'q'; *ct = 'y';

    // c-string literál módosítása: segmentation error lehet: 
    *s1 = 'w'; *s2 = 'z';

    return 0;
}


/////////////////////////////////////////////////////////////////


#include <iostream>

int main()
{
    char  t[] = "Hello";
    const char ct[] = "Hello";

    // a "Hello" typusa const char[6]
    // const char[] --> char* konverzió kivételesen lehetséges
    // csak a C reverse kompatibilitás miatt
    char  *s1 = "Hello";    // line 12: warning

    // ez a helyes C++ út:
    const char  *s2 = "Hello";

    // warning-ok:
    2_const.cpp: In function `int main()':
    2_const.cpp:12: warning: invalid conversion from `const void*' to `void*'
    2_const.cpp:17: assignment of read-only location


    void  *v1 = t, *v2 = ct, *v3 = s1, *v4 = s2;    // line 17: warning
    std::cout << v1 << '\t' << v2 << '\t' << v3 << '\t' << v4 << std::endl;
    *t = 'x'; *ct = 'y'; *s1 = 'w'; *s2 = 'z';

    return 0;
}


/////////////////////////////////////////////////////////////////


#include <iostream>

int main()
{
    char  t[] = "Hello";
    const char  *s1 = "Hello";

    *t = 'x';
    *s1 = 'w';  // line 12: syntax error

    return 0;
}

// ez a program nem fordul le:
3_const.cpp: In function `int main()':
3_const.cpp:12: assignment of read-only location