Zeiger mit Zählvariable indizieren
Mittwoch, 23. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  Programmiersprache C  |  Zeiger mit Zählvariable indizieren « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Zeiger mit Zählvariable indizieren  (Gelesen 1440 mal)
 
hennesf
Newbie
*
Offline Offline

Beiträge: 9


Profil anzeigen
« am: November 05, 2011, 21:15:13 »

Hallo,
ich wüsste gerne ob sich Zeiger indizieren lassen. Was ich meine ist:

*Zeiger1   zeigt auf String1
*Zeiger2   zeigt auf String2   usw.

Lässt sich so etwas auch umsetzen in der Form:

*Zeiger(Zählnummer)  zeigt auf String(Zählnummer)

um mit Hilfe von (Zählnummer) den Stringpointer auf verschiedene Strings zu setzen?

Danke für eure Antworten.

Gruß Hans
Gespeichert
Edson
Globaler Moderator
Sr. Member
*****
Offline Offline

Beiträge: 373



Profil anzeigen
« Antworten #1 am: November 06, 2011, 01:02:03 »

Hallo Hennes,

das geht wie mit jedem anderen Datentyp auch, du musst nur als Array deklarieren:

Beispiel:
Code:
   char[] foo = "foo";  // Char-Array oder "String"
   char[] bar = "bar";  //
   int * pArray[2];     // Zeiger-Array mit zwei Elementen
   pArray[0] = &foo[0]; // Zeiger mit Index 0 zeigt jetzt auf "foo"
   pArray[1] = &bar[0]; // Zeiger mit Index 1 zeigt jetzt auf "bar"

Gruß,
Edson
Gespeichert
hennesf
Newbie
*
Offline Offline

Beiträge: 9


Profil anzeigen
« Antworten #2 am: November 06, 2011, 12:23:51 »

Hallo, danke für die Antwort.

Vielleicht habe ich mich nicht so ganz glücklich ausgedrückt. Hier:

 pArray[0] = &foo[0]; // Zeiger mit Index 0 zeigt jetzt auf "foo"
 pArray[1] = &bar[0]; // Zeiger mit Index 1 zeigt jetzt auf "bar"

sind im Index des Zeigerarrays Zahlen, ich wollte dort gerne eine Variable
[Zählnummer] einsetzen, die dann im Programmverlauf den Zeiger auf die Adresse von Char-Array[Zählnummer] setzt. Geht so was?

Gruß Hans
Gespeichert
Edson
Globaler Moderator
Sr. Member
*****
Offline Offline

Beiträge: 373



Profil anzeigen
« Antworten #3 am: November 06, 2011, 12:47:30 »

Hallo Hans,

ich wollte dort gerne eine Variable
[Zählnummer] einsetzen, die dann im Programmverlauf den Zeiger auf die Adresse von Char-Array[Zählnummer] setzt. Geht so was?

da habe ich dich wirklich falsch verstanden. Ja, das geht auch. Zu beachten ist dabei, dass der Index ein int sein muss und dass du die Array-Grenzen überwachen musst (keine negativen oder größeren Zahlen als das Array Felder hat)

Gruß,
Edson
Gespeichert
hennesf
Newbie
*
Offline Offline

Beiträge: 9


Profil anzeigen
« Antworten #4 am: November 06, 2011, 15:20:54 »

Danke,

werd's mal einbauen.

Schönen Sonntag noch.

Gruß Hans
Gespeichert
hennesf
Newbie
*
Offline Offline

Beiträge: 9


Profil anzeigen
« Antworten #5 am: November 07, 2011, 13:04:46 »

Hi,
bin nach dem Ausprobieren jetzt nicht wirklich weiter gekommen.

Folgender Code-Abschnitt

   rom char String1[] = "Mein Name ist:";   //Deklaration der
   rom char String2[]=  "Hase ";           //zwei Strings

wird ohne Fehler kompiliert und der Text im Speicher abgelegt. Auf die Zahlen
1 bzw 2,bzw auf die damit gekennzeichneten String, würde ich gerne Pointer zeigen lassen und die Zahlen als Zählnummer in einer Schleife zuweisen.

        *zeiger(Zählnummer) zeigt auf String(Zählnummer)

Wenn ich in der Stringdeklaration die 1, oder die 2, in runde oder eckige Klammern setze, bekomme ich jeweils einen Syntax-Error.

        rom char String(1)[] oder rom char String[2][]
Wie ist da der richtige Syntax um die Strings über ihre Zählnummer anzusprechen?

Ich hoffe meine Frage ist verständlich gestellt.

Danke.
Gespeichert
Edson
Globaler Moderator
Sr. Member
*****
Offline Offline

Beiträge: 373



Profil anzeigen
« Antworten #6 am: November 07, 2011, 14:05:50 »

Hallo Hans,

oje, ich glaube, es wird Zeit, dass du dir ein Buch über die Programmiersprache C besorgst. Du wirst es nicht allein über dieses Forum lernen können.

Grund:
Code:
    String(1)[]

Merke: Runde Klammern sind in C ein eindeutiges Kennzeichen für einen Funktionsaufruf(!). Du möchtest aber ein Array indizieren, das du ja auch (mit welchen Klammern?) bereits deklariert hast.

...und noch ein Hinweis:
Code:
        rom char String(1)[] oder rom char String[2][]

Weder noch. Der Speicher-Qualifizierer "rom" ist nur bei der Deklaration anzugeben, nicht beim referenzieren im Quelltext.

Gruß,
Edson

PS: Ich hoffe, du nimmst meinen "Wink" nicht übel und raffst dich auf ein gescheites C-Buch zu lesen. Du wirst sehen dass sich das lohnt.
Gespeichert
hennesf
Newbie
*
Offline Offline

Beiträge: 9


Profil anzeigen
« Antworten #7 am: November 07, 2011, 16:01:39 »

Hallo, nein ich nehm's nicht übel. Geb ja zu dass ich Anfänger bin. Was ich von C weiss stammt aus den Kapiteln von der Seite Sprut.de die ich alle durch- und ausgearbeitet habe. Noch mal zu einem Ansinnen, bitte,ok?

Ich habe 2 verschiedene Char- Arrays deklariert mit den Namen
String1 und String2, die beide den Speicherqualifizierer rom tragen, weil sie beide im Programmspeicher abgelegt werden sollen, was ja auch funktioniert.

  
Code:
rom char String1[] = "Mein Name ist:";   //Deklaration der
   rom char String2[]=  "Hase ";           //zwei Strings

 Nun lasse ich einen Pointer, den ich deklariert und initialisiert habe mit:

      
Code:
rom char *pString = NULL;

 zeigen auf String1.

Code:
pString = &String1[0];

Dieser Zeiger pString findet nun innerhalb einer Schleife Verwendung um den Text, auf dessen Adresse er zeigt, auszugeben. Da die Schleife immer wieder benutzt wird, möchte ich, je nach darzustellendem Text, zur Laufzeit die Adresse, auf die dieser Pointer zeigt, aktualisieren.
Will sagen: Die Bezeichnung pString bleibt bestehen, nur die Adresse, auf die der Pointer zeigt, ist von

String1, String2, String3,,,,,,usw.

Vielleicht habe ich mich bisher einfach zu unverständlich ausgedrückt???
Falls immer noch nicht, kauf ich mir ein Buch, versprochen.




  
Gespeichert
Edson
Globaler Moderator
Sr. Member
*****
Offline Offline

Beiträge: 373



Profil anzeigen
« Antworten #8 am: November 07, 2011, 17:32:41 »

Hallo, nein ich nehm's nicht übel.

Freut mich dass du mich verstehst.

Zitat
Noch mal zu einem Ansinnen, bitte,ok?

Ok. Ich habe hier einen (MCC18)Beispiel-Code für dich:

Code:
#include <p18f2550.h>

rom char * strTest1 = "FooFooFoo?";
rom char * strTest2 = "BarBarBar!";

void FillCharArrayFromROM(rom char * pRom, char chars[])
{
   int i;
   for(i=0; i<10; i++)
   {
      chars[i] = *pRom++;
   }
}
void main(void)
{
   char chars[10];
   rom char * pString = 0;
   rom char * pArray[2] = {strTest1, strTest2};
   
   // Einzel-Zuweisungen
   pString = &strTest1[0];
   FillCharArrayFromROM(pString, chars);
   pString = &strTest2[0];
   FillCharArrayFromROM(pString, chars);
   
   // Zuweisung über Array
   pString = pArray[0];
   FillCharArrayFromROM(pString, chars);
   pString = pArray[1];
   FillCharArrayFromROM(pString, chars);
   
   while(1);
}


Gruß,
Edson
Gespeichert
hennesf
Newbie
*
Offline Offline

Beiträge: 9


Profil anzeigen
« Antworten #9 am: November 07, 2011, 18:13:36 »

Hallo,

bist echt geduldig mit mir. Zwinkernd

Aber dafür reicht mein angelesenes Wissen doch noch nicht.

Kannst du mir ein gutes Buch empfehlen, eventuell sogar mit Schwerpunkt "C für Mikrocontroller"?

Danke für alles.
Hans
Gespeichert
Edson
Globaler Moderator
Sr. Member
*****
Offline Offline

Beiträge: 373



Profil anzeigen
« Antworten #10 am: November 07, 2011, 20:47:26 »

Aber dafür reicht mein angelesenes Wissen doch noch nicht.

Doch, doch - Du hast ja schon in die richtige Richtung gedacht. Bei mir ist momentan die Zeit etwas knapp, aber ich hätte trotzdem ein paar erklärende Worte zum Beispiel dazuschreiben sollen.

Stell einfach deine Fragen, was du an dem Code nicht verstehst. Du bekommst sie hier beantwortet.

Zitat
Kannst du mir ein gutes Buch empfehlen, eventuell sogar mit Schwerpunkt "C für Mikrocontroller"?

Ein solches Buch würde ich nicht empfehlen, da es mehr Fragen aufwerfen wird als es beantworten kann (spätestens wenn du ein Programm mit einem anderen Compiler übersetzen willst). Die meiner Meinung nach effizienteste Kombination ist ein Buch a la "Programmieren in C" (Hanser Verlag) oder "Programmiersprache C" (Addison-Wesley Verlag) zusammen mit einem Compiler-Handbuch.

Bei C ist es wichtig zu verstehen, was vom Standard festgelegt ist und welche Dinge speziell vom Compiler "mitgeliefert" werden.

Gruß,
Edson
Gespeichert
hennesf
Newbie
*
Offline Offline

Beiträge: 9


Profil anzeigen
« Antworten #11 am: November 21, 2011, 10:28:39 »

Hallo,

habe mir jetzt erst mal ein Buch bestellt.

Danke für deine Mühe.

Wir treffen uns hier sicher noch öfter. Bis denne.

Gruß Hans
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.043 Sekunden mit 18 Zugriffen.
 
Top! Top!