home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 March / Chip_2002-03_cd1.bin / chplus / cecko / CPP / RETEZCE.CPP < prev    next >
C/C++ Source or Header  |  1998-10-05  |  2KB  |  47 lines

  1. // P⌐íklad: Programování v C++ na FJFI - ÇVUT
  2. #pragma hdrfile="TCDEF.SYM" // pro urychlení p⌐ekladu
  3. #include <iostream.h>
  4. void strcpy(char *dest,char *src) {
  5.  while (*dest++=*src++); //p⌐edpokládáme, æe v dest bude dost volného místa
  6. } /*Toto je zápis, jak jednoduché, av¿ak pro programátora v Pascalu asi to není moc z⌐ejmé, ale v C++ se je¿tê asi setkáte s ménê jasnÿmi vêcmi,
  7. takæe si to vysvêtlíme, proç to funguje tak, jak to funguje.
  8. Ukazatelé dest a src nechƒ ukazují na první znak ⌐etêzce. P⌐edpokládáme, æe dest ukazuje na ⌐etêzec s hodnê dlouhÿ.
  9. *dest=*src by znamenalo, æe by se p⌐enesl jeden znak, z místa odkud ukazuje
  10. src do místa, kam ukazuje dest. Vÿsledkem tohoto p⌐i⌐azení je hodnota, podle
  11. toho, jakÿ znak se p⌐enesl. Asi uæ víme, æe na konci zdrojového ⌐etêzce se
  12. p⌐edpokládá nula, potom bude vÿsledkem p⌐i⌐azení 0 a cyklus while skonçí.
  13. Ale my si p⌐ejeme p⌐enést dal¿í znak, proto musíme pouæít ++, abychom se
  14. dostali na dal¿í znak ve zdrojovém a cílovém ⌐etêzci. Takæe to tak funguje.
  15. A na závêr, kompilátor oznámí Possibly incorrect assigment, coæ je zde
  16. oprávnêné, zde máme skuteçnê na mysli p⌐i⌐azení a takæe je to v po⌐ádku.*/
  17.  
  18. char* Strcpy(char *dest, char *src) {
  19.  int i=0;
  20.  do {
  21.   dest[i] = src[i];i++;
  22.  } while (!dest[i]);
  23.  return dest;
  24. }
  25.  
  26. char *c = "AHOJ";
  27. char *d = c;
  28. char novy[50];
  29. char novy2[50];
  30. void main() {
  31.  cout << "Start programu:" << endl;
  32.  cout << c << endl;
  33.  cout << d << endl;
  34.  d[1]='X'; //tvrdím, æe zmêna se projeví v obou ⌐etêzcích, protoæe c i d ukazují na stejné místo v pamêti
  35.  cout << c << endl;
  36.  cout << d << endl;
  37.  c = "Novy test";
  38.  strcpy(novy,c);
  39.  c[1]='X'; //nyní se jiæ zmêna neprojeví, novy zûstana beze zmêny
  40.  cout << novy << endl;
  41.  c = "Posledni test";
  42.  cout << Strcpy(novy2,c) << endl; //volá se jiná funkce
  43.  c[1]='X'; //nyní se také zmêna neprojeví, novy2 zûstana beze zmêny
  44.  cout << novy2 << endl;
  45.  cout << "Konec programu:" << endl;
  46. }
  47.