#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