26. oktober 2000 - 18:46Der er
5 kommentarer og 2 løsninger
Pointer behandling!
Ok jeg er ved at fremstille et program.
Til dette bruger jeg en dél pointere.
Nu er det sådan at jeg har en streng[char array], som er således ud:
char *navn[max]; // max = 30 Altså et dimensionelt array eller flere én dimensionelle array\'s i array.
Derefter skal pointeren bruges, som variabel i en anden funkion.
Giv mig et eksempel på :
1 Pointeren flyttes til funktion. 2 Pointeren overføres til anden variabel så der kan incrementeres med \"n_temp++;\" 3 Variablens indhold skal sammenlignes med andet navn i et array \"Ikke nødvendigvis\" pointer notering. 4 Compileren må IKKE fremkomme med WARNINGS!
Håber dette giver lidt til eftertanke.
DER MÅ IKKE BRUGES STANDARD ELLER ANSI C++. Rent ANSI C
-jackonlinux PS: Programmering er sjovt -ikke svært !!!
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
/* Flyt streng pointeren til en funktion. */ strcpy(Buffer, strPtr[1]); strcat(Buffer, strPtr[2]); cprintf(\"Streng 2 (idx 1) = %s og 3 (idx 2) = %s giver:\\r\\n= %s\\r\\n\", strPtr[1], strPtr[2], Buffer);
/* Overflytning af pointer til anden variabel m/increment. */ char **tmpPtr = strPtr; /* S‘t start adresse. */ tmpPtr += 3; /* Flyt til det tredie element. */
cprintf(\"Strengen efter streng 4 (idx 3) = %s er:\\r\\n= %s\\r\\n\", strPtr[3], /* Dereference for at se indholdet/strengen. */ *(++tmpPtr));
/* Sammenlign indhold af to forskellige strenge fra tabel .. og fast. */ strcpy(Buffer, strPtr[5]); if (strcmp(Buffer, strPtr[5]) == 0) cprintf(\"Streng nr. 6 (idx 5) = %s er den samme som indholdet i buffer = %s.\\r\\n\", strPtr[5], Buffer);
if (strcmp(strPtr[5], strPtr[7]) == 0) cprintf(\"Streng nr. 6 (idx 5) = %s er den samme som streng 8 (idx 7) = %s.\\r\\n\", strPtr[5], strPtr[7]);
/* Afslut */ return 0; } /* main */
Bemærk at du er nødt til at deference din \"increment\" pointer for at få fat i selve indholdet af den streng der peges på. Husk på at ptrStr[] jo er et areal a POINTERE til strenge, dvs. tmpPtr peger på et pointer areal. For at se den reelle streng, skal du derfor først have fat i den rigtige pointer i det element som tmpPtr peger på - derfor derefereres med *. Så har du pointeren til den rent faktisk streng, som du kan bruge f.eks. som her i et kald til cprintf.
Forslaget ser nogenlunde ud, men ikke tilfredsstillende.
Når jeg mener at man skal kunne skrive variabel++, mener jeg at man skal kopiere pointer adressen over i en anden variabel for at opnå en metode uden at skrive : *(navn+[max++] )
Som du ser incrementerer du array elementet med 1.
For at reducere kompleksiteten i syntaksen kan man faktisk skrive variabel++, som ikke er en pointer constant, men en pointer variabel.
Og husk lige på at der ikke er tale om at der reserveres antal plads i et streng array når der bruges pointere. Det vokser alt efter hvor stort brugeren vælger det skal være. Du angiver jo ikke : --------------------------------------------- *pointer_array == (max 10) /* ikke gyldigt udsagn om pointere!!! */ ---------------------------------------------
Mvh jackonlinux >> PS: n_navn++ spring til næste element;
Prøv du lige at nærlæse koden igen min ven - jeg incrementerer tmpPtr (som svarer til din n_navn) direkte - men det ændrer sgu\' ikke på at det stadig er en pointer til en pointer og den derfor skal de-refereres for at du kan få fat i indholdet af strengen.
Hvis du er så \"dygtig\" forstår jeg slet ikke du søger svar her på eksperten - og så blankt afviser de svar du får !
&navn er til overførsel af såkaldte reference pointere. De virker egentlig fuldstændigt som en alm. pointer, dog behøver man ikke at skrive -> efter navnet, men kan skrive . i stf. Der er forskel i måde de to skal kaldes på:
int add2(int &navn) { return navn += 2; } skal kaldes add2(temp)
int add2(int *navn) { return *navn +=2; }
skal kaldes add2(&temp). Personligt foretrækker jeg den sidste syntaks, fordi man så kan se begge steder, at den overførte variabel kan (men ikke nødvendigt at den bliver) rettet. Hvis du har en int* til ovenstående skal det første kald (via &) være uændret, mens det andet kald (*) skal være UDEN & foran temp, da temp jo i forvejen er en pointer.
Synes godt om
Ny brugerNybegynder
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.