[C++] rzutowanie, wskazniki

zxc18
Użytkownik
Użytkownik
Posty: 92
Rejestracja: 12 gru 2007, o 14:29
Płeć: Mężczyzna
Lokalizacja: Szczecin
Podziękował: 65 razy
Pomógł: 1 raz

[C++] rzutowanie, wskazniki

Post autor: zxc18 »

mam problem z odczytaniem tego:
dodam ze funkcja ma dodawac dane typu string;

fragment:

Kod: Zaznacz cały

char (*tmptab)[MAXDL]; 
 tmptab = (char (*)[MAXDL])realloc( tab, (n+1)*MAXDL ); // ???
/* przed realloc powinno byc rzutowanie to nie powinno byc (char*)realloc(tab,sizeof (char)*(MAXDL+1) ?? */  

i jak rozumiec zapis:

Kod: Zaznacz cały

int WstawDane()(double *&dane, unsigned int &ilosc,
                double nowedane, unsigned int pozycja)
{ double *pomoc;
  pomoc = (double *)realloc(dane,sizeof(double)*(ilosc+1));
  if (pomoc==NULL) return –1;  //  brak pamieci !
  dane = pomoc;
  if (pozycja > ilosc) pozycja = ilosc;
  for (unsigned int i=ilosc; i>pozycja; i--)
      dane[i] = dane[i-1];                             // ??? jakim cudem :/
      //  *(dane+i) = *(dane+i-1);
  dane[pozycja] = nowedane;
  // *(dane+pozycja) = nowedane;
  ilosc++;
  return 0; 
wiem ze funkcja ma rozsuwac tablice by zrobic miejsce dla nowego elementu ...

Bardzo dziekuje za pomoc, pozdrawiam
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

[C++] rzutowanie, wskazniki

Post autor: kadiii »

double *&dane
?

Kod: Zaznacz cały

char *tmptab;
tmptab=(char *)realloc(tab,(n+1)*sizeof(char))
Poza tym sformułuj jaśniej pytania bo niezbyt wiadomo o co pytasz(przynajmniej ja do końca nie jestem pewien).
zxc18
Użytkownik
Użytkownik
Posty: 92
Rejestracja: 12 gru 2007, o 14:29
Płeć: Mężczyzna
Lokalizacja: Szczecin
Podziękował: 65 razy
Pomógł: 1 raz

[C++] rzutowanie, wskazniki

Post autor: zxc18 »

hmm to tak: jak odczytac to ? tak po polsku i co to znaczy:

Kod: Zaznacz cały

tmptab = (char (*)[MAXDL])realloc( tab, (n+1)*MAXDL ); 
co do:

Kod: Zaznacz cały

double *&dane
oznacza to: (cytat z madrego zrodla)
/*Jeżeli wewnątrz funkcji następuje alokacja lub realokacja tablicy dynamicznej
(adres tablicy może wówczas ulec zmianie), to wskaźnik na początek tablicy musi być przekazany przez referencję
(argument formalny funkcji ma wówczas postać: typ *&tab ) */
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

[C++] rzutowanie, wskazniki

Post autor: kadiii »

tmptab = (char (*)[MAXDL])realloc( tab, (n+1)*MAXDL );
do wskażnika tmptab przypisz wskażnik na miejsce w pamięci przydzielone przez funkcję realloc która zwiększa miejsce na tablicę tab, względnie zmienia miejsce wskażnika i przepisuje zawartość tablicy(jak zabraknie w danym miejscu pamięci).
Co do *&dane mój znak zapytania odnosił się do
dane = dane[i-1]; // ??? jakim cudem :/
. Oto chodziło?.
zxc18
Użytkownik
Użytkownik
Posty: 92
Rejestracja: 12 gru 2007, o 14:29
Płeć: Mężczyzna
Lokalizacja: Szczecin
Podziękował: 65 razy
Pomógł: 1 raz

[C++] rzutowanie, wskazniki

Post autor: zxc18 »

ok wieelkie dzieki a to drugie juz nie wazne, skapowalem
ODPOWIEDZ