Avatar billede baltazar_ Nybegynder
17. november 2002 - 14:43 Der er 6 kommentarer og
1 løsning

pointer eksempel

Jeg er ved at lære om pointerer og kunne tænke mig om nogle havde et eksempel på hvorledes man kan pointe til at læse hvad der står mellem "start" og "slut" i en buffer for derefter at udskrive det og tømme bufferen
Avatar billede arne_v Ekspert
17. november 2002 - 14:59 #1
char *p,*p2,buf[100];

p = buf;
p2 = buf + sizeof(buf);
while(p<p2)
{
  // behandl *p
  p++;
}

men ofte kan den slags gøres smartere
med str eller mem funktioner.
Avatar billede ricelius Nybegynder
18. november 2002 - 02:40 #2
Det burde være sizeof(buf) / sizeof(buf[0])
En char er ikke nødvendigvis 1 byte i memory... Især ikke hvis du bruger Unicode
Avatar billede arne_v Ekspert
18. november 2002 - 19:00 #3
Øh.

Jeg troede altid at en char var en byte og at man brugte
wchar_t til Unicode ??
Avatar billede baltazar_ Nybegynder
18. november 2002 - 22:06 #4
ok formulerede mig lidt forkert. Mente hvordan manlæser hvad der står MELLEM et char  $  og char  ,
Avatar billede jakobdo Ekspert
19. november 2002 - 10:17 #5
Den blev sgu da mere kryptisk!
Hvordan man læser hvad der står mellem char $ og char ,?

Kan du give et eksempel??

Snakker vi om at du vil læse hvad der står f.eks. her:

$123456789, og så vil du kunne læse 123456789 ???
Eller hvad??
Avatar billede arne_v Ekspert
19. november 2002 - 13:19 #6
Jeg kunne også godt bruge lidt mere info.
Avatar billede soepro Nybegynder
20. november 2002 - 14:34 #7
Hvis pointer bare peger på et char array af en given længde, så f.eks.:

const int maxSize = 256;
char array[maxSize];
char *ptrArray, *ptrEndArray;

ptrArray = &array;
ptrEndArray = array + sizeof(array);
while (ptrArray < ptrEndArray)
{
  cout << "Næste/først tegn er " << *ptrArray;
  ptrArray++;
}

Brugen af pointere er dog KUN er (hastighedsmæssig) fordel, såfremt du skal behandle det pågældende element mange gange inden du går videre med det næste. Der er bedre/mere læselige alternativer, som performer lige så godt, hvis du kun skal have fat i det een gang:

char *ptr;

for (int idx = 0; idx < sizeof(array); idx++)
{ // Sæt ptr til at pege på nuv. element aht. hastighed.
  ptr = array[idx];
  cout << "Det " << idx << "\'te element er " << ptr; // samme hastighed som array[idx]
  cout << "Det " << idx << "\'te element er stadig " << ptr; // hurtigere end array[idx]
};

char * ptr = &array;
for (int idx = 0; idx < sizeof(array); idx++)
{
  cout << "Det " << idx << "\'te element er " << ptr+idx;
};

Der er en anden fordel ved at bruge indekser - nemlig at du ved hvilket elementnummer du er ved at behandle.
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