08. juni 2003 - 14:05Der er
11 kommentarer og 1 løsning
Arrays og funktioner -Har jeg ret
Lige for tiden roder jeg med pointere og reffarencer hvilket fik mig til at tænke på noget.
For at afprøve det brugte jeg følgende kode:
#include <iostream>
using namespace std;
void funk(int i[]) { i[0]=2; i[1]=3; }
int main() { int i[3]; funk(i); cout<<i[0]<<i[1]<<endl; cin>>i[3]; return 0; }
og outputtet blev 23.
Ved normale variabler skal man enten bruge pointere eller reffarencer for at en funktions ændringer forbliver efter den er afsluttet. I oventående eksempel forbliver funktionens ændringer selvom den er afsluttet ergo skal man ikke bruge pointere til array's.
Det du egentlig gør, er at sende en pointer med til din funktion ( i ), gennem denne pointer ændrer funktionen den variabel, der er erklæret i main. Sagt på en anden måde, "funk" ændrer i det "i" peger på, og derfor kan det "funk" har skrevet også læses fra main, idet det er den samme hukommelsesplads.
Jeg ved ikke om mit svar var med til at gøre forvirringen større. ... ellers er der sikkert en anden, der kan formulere det lidt mere letforståeligt ...
Simple data typer (og structs !) sende default over by value men kan sende over by reference ved at angive * i funktions erklæringen og & på argumenterne i selve kaldet.
Du kan verificere at jeg har ret ved at compile:
#include <iostream>
using namespace std;
void funk(int *i) { i[0]=2; i[1]=3; }
int main() { int i[3]; funk(i); cout<<i[0]<<i[1]<<endl; cin>>i[3]; return 0; }
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.