Avatar billede danielhep Nybegynder
11. februar 2003 - 17:53 Der er 9 kommentarer og
2 løsninger

PointerTilPointer

char **text;

Kort og godt, jeg er ikke helt med det en double op stjerne... :/

Hvad betyder det helt præcist, og hvis der var en som ville lave et eksempel med en "**" ville jeg blive meget glad.

Mvh

Daniel
Avatar billede arne_v Ekspert
11. februar 2003 - 17:56 #1
Det skal du bruge hvis du skal have et dynamisk array af dynamisk array.

I C++:

typedef char *charptr;


char **s;
s = new charptr[N];
for(int i = 0; i < N; i++) s[i] = new char[M];
Avatar billede arne_v Ekspert
11. februar 2003 - 17:58 #2
I C må det være:

typedef char *charptr;


char **s;
int i;
s = (charptr *)malloc(N*sizeof(charptr));
for(i = 0; i < N; i++) s[i] = (char *)malloc(M);
Avatar billede arne_v Ekspert
11. februar 2003 - 17:59 #3
Indtastet direkte uden at teste, så du må hellere lige checke min
kode for tåbelige typos.

:-)
Avatar billede danielhep Nybegynder
11. februar 2003 - 18:00 #4
hvis jeg har forstået det her rigtigt mener du så at man kan udvidde sit d. array af d. array, hvis der er to ** foran, og ikke hvis der kun er en * ?
Avatar billede soreno Praktikant
11. februar 2003 - 18:00 #5
Et andet - måske mere praktisk eksempel:
#include <stdio.h>

int main(int argc, char **argv)
{
    for(int i=0;i<argc;i++)
    {
        printf("arg[%i] = [%s]\n", i, argv[i]);
    }
   
    return 0;
}


Eksempel:
main.exe hello world -s -t 2
arg[0] = [main]
arg[1] = [hello]
arg[2] = [world]
arg[3] = [-s]
arg[4] = [-t]
arg[5] = [2]
Avatar billede danielhep Nybegynder
11. februar 2003 - 18:01 #6
s = (charptr *)malloc(N*sizeof(charptr));

Det er "N" hvad er det for noget ?
Avatar billede danielhep Nybegynder
11. februar 2003 - 18:03 #7
jamen soreno, kunne man ikke også godt gøre det samme hvis jeg bare gjode sådan her...
#include <stdio.h>

int main(int argc, char *argv)
{
    for(int i=0;i<argc;i++)
    {
        printf("arg[%i] = [%s]\n", i, argv[i]);
    }
   
    return 0;
}


Eksempel:
main.exe hello world -s -t 2
arg[0] = [main]
arg[1] = [hello]
arg[2] = [world]
arg[3] = [-s]
arg[4] = [-t]
arg[5] = [2]
Avatar billede arne_v Ekspert
11. februar 2003 - 18:04 #8
N er antal strenge du skal have.

M er max-længden af strengene.
Avatar billede soreno Praktikant
11. februar 2003 - 18:06 #9
Nej - for du skal se "char **argv" som et "array af char pointers"
Altså når man skriver argv[0] så er det char array der er på plads 0 som tilgåes (i mit tilfælde "main").
Avatar billede arne_v Ekspert
11. februar 2003 - 18:06 #10
char *s;

er en pointer til at array af char som f.eks. kan indeholde 'a' 'b' 'c' '\0'

char **s;

er en pointer til et array af pointers som hver kan pege på en streng som f.eks.:
  'a' '\0'
  'b' '\0'
  'c' '\0'
Avatar billede danielhep Nybegynder
11. februar 2003 - 18:08 #11
jeg fatter det... :)

Tak
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