zdravím lokálne premenné sa ukladajú do akej pamäti???
Fórum › C / C++
C++ program porada
často na haldě (angl. heap). Některé systémy haldu nemají, ty používají zásobník(stack). Použitím některých modifikátorů to lze změnit, např po použití modifikátoru register může být uložena v registru.
hu
Ahoj začínám s C++ a sem u 3. lekce a nejde mi udělat ten úkol napíšu toto:
#include <iostream>
using namespace std;
int main()
{
for (int i=0; i<10; i++)
cout << "Hi!\n";
int jmeno;
cin >> jmeno;
char jmeno[0];
cin.get ();
cin.get ();
return 0;
}
A píše mi to eror u toho charu nevíte co tam mám špatně???
Píše mi to: in function 'int main ()':
volit jména pro proměnné tak aby každá měla unikátní jméno. Jaký smysl má alokovat pole s nulovou velikostí?
hu
#11 hlucheucho
Pole z nulovou velkostou sa pouziva vecsinou na tvorbu struktur s dynamickou velkostou (vecsinou C, nie C++). Nie je to ale v standarte, takze je na kompilatore ako to implementuje.
Samozrejme Zabak to pouzil zle (ak si nechcel poprepisovat stack) :
Mozne pouzitie:
class X{
size_t size; //velkost dynamickej casti struktury
char end[0]; //pointer end ukazuje na this+1 (zalezi ale od kompilatora)
X(size_t s):size(s){}
public:
static X* New(size_t s){ //trieda musy byt alokovana specialnym sposobom
char* c = new char[sizeof(X) + s];
new(c) X(s);
return reinterpret_cast<X*>(c);
}
char& at(size_t i){ //dynamicke udaje
if(i >= size)throw "error";
return end[i];
}
void operator delete(void* ptr){ //kedze je trieda alokovana ako pole tak ju treba aj uvolnit ako pole
delete[] reinterpret_cast<char*>(ptr);
}
};
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Program, ktory otvori iny program — založil Nummi
C# program — založil Tomas.P
C# program — založil xpiii
Moderátoři diskuze