Avatar billede smh86 Nybegynder
31. maj 2006 - 10:36 Der er 8 kommentarer og
1 løsning

Static array

Jeg er i gang med at kode et kryds og bolle-spil. I den forbindelse har jeg en  rekursiv funktion. I den starter jeg med at initialisere et array af chars. Dette array bruges til at gemme de input, som brugerne kommer med. Når funktionen kalder sig selv, bliver værdierne i arrayet ikke gemt. Hvordan kan det være?

Jeg har løst problemet med at sætte static foran, når jeg initialiserer det, men kunne godt tænke mig at vide, hvorfor det er nødvendigt. Array-navnet peger er jo en pointer, som derfor ikke burde ændres ved at jeg kalder funktionen igen?
Avatar billede arne_v Ekspert
31. maj 2006 - 13:13 #1
snakker vi en lokal variabel ?

void f()
{
  int *p;

vil have en forskellig p for hvert kald af f

void f()
{
  static int *p;

vil dele p mellem alle kald
Avatar billede mxs Nybegynder
31. maj 2006 - 15:56 #2
Static, holder p statisk, altså den findes kun en instans.
Avatar billede arne_v Ekspert
31. maj 2006 - 16:22 #3
i finere OO terminologi

man kan ogsaa sige at static goer at variablen ryger i heap fremfor paa stack
Avatar billede smh86 Nybegynder
31. maj 2006 - 17:44 #4
Tak for jeres svar.

Ja, det er en global variabel.

Jeg troede faktisk, at en pointer altid pegede på det samme.
Avatar billede arne_v Ekspert
31. maj 2006 - 17:50 #5
global ? saa er betydningen af static kun at den ikke kan ses udenfor filen !

void f()
{
  int *p; // her vil der ved kald af f blive allokeret sizeof(int*) ofte 4 bytes
          // paa stakken
Avatar billede smh86 Nybegynder
31. maj 2006 - 20:34 #6
Sikke jeg vrøvler. Du må undskylde, men jeg mente, at det er en lokal variabel.

Er det egentlig dårlig "coding style" at bruge static? Bør man hellere strukturere sit program, således det undgås?
Avatar billede arne_v Ekspert
31. maj 2006 - 21:18 #7
Jeg antager at vi kun snakker om static op lokale variable (static har
en del forskellige betydninger i C/C++).

Jeg vil mene at det er uhyre sjaeldent at man bruger den i C++.

Den ses engang i C naar man kun vil have koert noget kode foerste gang
en funktion kaldes og den slags.

I multithreaded sammenhaeng er den lige saa farlig som en global variabel. Og
svaere at spotte.

Saa jeg vil maaske ikke gaa saa vidt som at kalde det daarlig coding style. Men
jeg vil mene at det er meget meget sjaeldent at det er bedste mulighed.
Avatar billede smh86 Nybegynder
01. juni 2006 - 17:05 #8
Hej Arne.

Mange tak for dit svar! :)

Vil du smide et svar?
Avatar billede arne_v Ekspert
01. juni 2006 - 17:28 #9
kommer her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester