Torben W. Hansen <mail@ins-intersoft.com> skrev:
> "Michael Olsen" <mfolsen@hotmail.com> skrev i en meddelelse
>
>> Hvornår bruger man så det ene eller andet.
>> char *streng1 = "Hans1";
>> char streng2[] = "Hans2";
>> char streng3[10] = "Hans3";
>
> I tillæg til Mads' forklaring har jeg en tilføjelse:
>
> char streng2[] og char streng3[] er begge er placeret i ram, da indholdet
> kan ændres. Adressen af f.eks. streng2[] er givet ved streng2 (uden indeks)
> eller som &streng2[0].
>
> char *streng1 er en pointer der ligger i ram, som er initialiseret til at
> pege på startadressen på første element i "Hans1" der ligger i
> kode-segmentet og derfor ofte read only memory.
Dataene behøver nu ikke at ligge sammen med koden. De kunne også
ligge i et read-only data-segment, eller endda i et write-read
data-segment. Det er helt op til oversætteren, linkeren og
styresystemet. Det eneste der ligger fast, er at det er udefineret
adfærd at forsøge at ændre indholdet.
Hvis streng1 havde været erklæret
const char *streng1 = "Hans1";
kunne oversætteren have advaret mod forsøg på ændringer.
>Imodsætning til streng2 og streng3 kan streng1 tildeles en ny addresse
> f.eks. som streng1 = streng2;
> "Hans1" eksisterer stadig, men streng1 peger bare ikke længere på denne.
>
> Dit eksempel i modificeret form:
>
> #include <stdio.h>
>
> char *streng1 = "Hans1";
> char streng2[] = "Hans2";
>
> int main ()
> {
> printf ("%s\n", streng1 );
> printf ("%s\n", streng2 );
> streng1 = streng2; // pointer streng1 tildeles adressen streng2
> printf ("%s\n", streng1 );
> streng1 = "Hans1"; // pointer streng1 tildeles oprindelig adresse
Forkert. Når man skriver "Hans1" flere steder i programmet, må
oversætteren gerne bruge den samme streng med samme adresse, men den
behøver ikke at gøre det.
> printf ("%s\n", streng1 );
> return 0;
> }
--
Skal musik- og edb-industrien have ret til fratage forbrugerne deres
rettigheder i henhold til Ophavsretloven, begrænse konkurrencen og
fremme monopoldannelse ved hjælp af tekniske midler? Sig nej! Nu!
Støt underskriftsindsamlingen på
http://www.digitalforbruger.dk