mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik [PIC] Hilfe bei C18 pointer


Autor: Andreas Riegebauer (blackpuma)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe ein paar Fragen zum C18 für PIC.

1. Wie kann ich einen Pointer definieren?
char* test;   // Variante 1
char *test;   // Variante 2
char * test;  // Variante 3

2. Wenn ich einen Pointer habe wie kann ich da Daten reinschreiben? Was 
ist der unterschied bei den beiden Varianten?
test  = "Muh";   // Variante 1
test  = 'Muh';   // Variante 2

3. Alles was ich mit Stern angebe ist doch die Adresse des Pointers?
*test = "Muh";    // Adresse
test  = "Muh";    // Inhalt

4. Wie kann ich einen Pointer übergeben?
void LCD_WriteString(const rom char *string);  // Prototyp

.
.
char *test;

test = "Muh";

LCD_WriteString( test );
.
.

Ich habe diese Pointer schon in der Schule gehasst und ich kenne mich 
noch immer nicht aus damit.

LG
Andreas

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Riegebauer schrieb:
> Hallo!
>
> Ich habe ein paar Fragen zum C18 für PIC.
>
> 1. Wie kann ich einen Pointer definieren?
>
> char* test;   // Variante 1
> char *test;   // Variante 2
> char * test;  // Variante 3

Das ist Jacke wie Hose. Manche mögen es so lieber und andere so.

> 2. Wenn ich einen Pointer habe wie kann ich da Daten reinschreiben? Was
> ist der unterschied bei den beiden Varianten?
>
> test  = "Muh";   // Variante 1
> test  = 'Muh';   // Variante 2

Einen Pointer richtet man auf das, worauf er zeigen soll. Dazu dient der 
Adressoperator &.

> 3. Alles was ich mit Stern angebe ist doch die Adresse des Pointers?
>
> *test = "Muh";    // Adresse
> test  = "Muh";    // Inhalt

Du möchtest das nochmal in einem Buch nachlesen :-)
Wenn man den Pointer dereferenziert, dann bekommt man den Inhalt. Dazu 
benutzt man den Dereferenzierungsoperator *.

> 4. Wie kann ich einen Pointer übergeben?
>
> void LCD_WriteString(const rom char *string);  // Prototyp
> 
> .
> .
> char *test;
> 
> test = "Muh";
> 
> LCD_WriteString( test );

Du übergibst die Adresse. Vorher sollte man aber den Pointer auf was 
Vernünftiges zeigen lassen, sonst ist's Essig ;-)

Autor: Andreas Riegebauer (blackpuma)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> 1. Wie kann ich einen Pointer definieren?
char* test;   // Variante 1
char *test;   // Variante 2
char * test;  // Variante 3
>
> Das ist Jacke wie Hose. Manche mögen es so lieber und andere so.

Also das ist egal wohin der Stern kommt. Kann ich mal einen Punkt 
abhaken.

>> 2. Wenn ich einen Pointer habe wie kann ich da Daten reinschreiben? Was
>> ist der unterschied bei den beiden Varianten?
test  = "Muh";   // Variante 1
test  = 'Muh';   // Variante 2
>
> Einen Pointer richtet man auf das, worauf er zeigen soll. Dazu dient der
> Adressoperator &.

Und wie mache ich das genau? So vielleicht? Wo liegt denn eigentlich der 
Unterschied ob ich " oder ' mache?
&test = "Muh";

>> 3. Alles was ich mit Stern angebe ist doch die Adresse des Pointers?
*test = "Muh";    // Adresse
test  = "Muh";    // Inhalt
>
> Du möchtest das nochmal in einem Buch nachlesen :-)
> Wenn man den Pointer dereferenziert, dann bekommt man den Inhalt. Dazu
> benutzt man den Dereferenzierungsoperator *.

Wie kann ich den Inhalt eines Pointers ausgeben?

>> 4. Wie kann ich einen Pointer übergeben?
void LCD_WriteString(const rom char *string);  // Prototyp
.
.
char *test;

test = "Muh";

LCD_WriteString( test );
>
> Du übergibst die Adresse. Vorher sollte man aber den Pointer auf was
> Vernünftiges zeigen lassen, sonst ist's Essig ;-)

Kannst du mir vielleicht noch ein Beispiel dazuschreiben wie ich den 
Pointer auf etwas vernünftiges zeigen lasse?

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier ein Beispiel. Nun schnapp Dir aber ein gutes Buch oder Tutorial 
über C und arbeite das mal durch! :-)

#include <stdio.h>
#include <string.h>

void rueckwaerts(char*);

int main()
{
  char string[] = "Hello World";                    // string anlegen
  printf("string: %s\n", string);                    // string ausgeben
  
  char* stringptr;
  stringptr = &string[0];                            // Zeiger ausrichten
  printf("string ueber pointer: %s\n", stringptr);  // Ausgeben über den Pointer
  
  rueckwaerts(stringptr);                            // Ausgabe rueckwaerts ueber Funktion
  
  return 0;
}

void rueckwaerts(char* text)
{
  char* ptr;
  int i = strlen(text) - 1;                          // Länge des Strings über Bibliotheksfunktion
  ptr = &text[i];                                    // Zeiger auf letztes Zeichen setzen
  
  printf("rueckwaerts: ");
  while (i>=0)                                      // jetzt rueckwaerts
  {
    printf("%c", *ptr);                              // und ausgeben
    ptr--;                                          // Zeiger um ein Zeichen weiter zurück setzen
    i--;
  }  
}


Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.