/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
lidt pointer gymnastik
Fra : Kristian Soerensen


Dato : 17-02-04 15:37

Hejsa!

Jeg har et problem, hvor jeg vil give en pointer til første element i et
array af char pointers med som argument til en funktion (traverse i
nedenstående) - og lade denne funktion behandle data i arrayet og
herefter returnere.

Problemet er (så vidt jeg kan se) at i "traverse" er det pointeren der
overskrives - og ikke de data den peger på.

- Er der nogen der har løsningsforslag?


Mvh.
Kristian Sørensen.




void traverse(char *a) {
   a = "1";
}

main ()
{
   char *a[10];
   traverse(*a);
   printf(a[0]);
}

 
 
Jesper Toft (17-02-2004)
Kommentar
Fra : Jesper Toft


Dato : 17-02-04 16:51

Kristian Soerensen wrote:

> Problemet er (så vidt jeg kan se) at i "traverse" er det pointeren der
> overskrives - og ikke de data den peger på.
>
> - Er der nogen der har løsningsforslag?


Problemet er at funktionen får en pointer til første element, derved kan den
kun rette i dette element, men ikke rette pointeren. Den bliver nød til at
få en pointer til en pointer..

noget i retningen af:

void traverse(char **a) {
*a = "1";
}

....

char *a[10];
traverse(&a[0]);
eller blot
traverse(a);

--
/Jesper


Kristian Soerensen (18-02-2004)
Kommentar
Fra : Kristian Soerensen


Dato : 18-02-04 09:37

Tak for det! - Det var lige hvad der skulle til :)

Jesper Toft wrote:
> Kristian Soerensen wrote:
>
>
>>Problemet er (så vidt jeg kan se) at i "traverse" er det pointeren der
>>overskrives - og ikke de data den peger på.
>>
>>- Er der nogen der har løsningsforslag?
>
>
>
> Problemet er at funktionen får en pointer til første element, derved kan den
> kun rette i dette element, men ikke rette pointeren. Den bliver nød til at
> få en pointer til en pointer..
>
> noget i retningen af:
>
> void traverse(char **a) {
> *a = "1";
> }
>
> ...
>
> char *a[10];
> traverse(&a[0]);
> eller blot
> traverse(a);
>

Nicolai Hansen (18-02-2004)
Kommentar
Fra : Nicolai Hansen


Dato : 18-02-04 15:23

> void traverse(char *a) {
>    a = "1";
> }
>

er det ikke bare

void traverse(char *a)
{
*a='1';
}

?

/Nic

Kristian Soerensen (18-02-2004)
Kommentar
Fra : Kristian Soerensen


Dato : 18-02-04 16:04

Nicolai Hansen wrote:
>>void traverse(char *a) {
>>   a = "1";
>>}
>>
>
>
> er det ikke bare
>
> void traverse(char *a)
> {
> *a='1';
> }
>
> ?
char *a er kun en reference til første element i arrayet.
og *a er det samme som a[0] - hvilket vil sige første _karakter_ i
første plads i arrayet. Derfor virker det ikke når man vil gennemgå arrayet.

KS.

Nicolai Hansen (19-02-2004)
Kommentar
Fra : Nicolai Hansen


Dato : 19-02-04 13:39

> > void traverse(char *a)
> > {
> > *a='1';
> > }
> >
> > ?
> char *a er kun en reference til første element i arrayet.
> og *a er det samme som a[0] - hvilket vil sige første _karakter_ i
> første plads i arrayet. Derfor virker det ikke når man vil gennemgå arrayet.
>
> KS.

while (*a!=0) *a++='1'; ?

(hvis altså a er en normal null-termineret streng...)

Nicolai Hansen (19-02-2004)
Kommentar
Fra : Nicolai Hansen


Dato : 19-02-04 13:40

ah, glem det

du har char *a[10];

så skal man lige en tak længere ud, som det andet svar siger :)

Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408182
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste