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


von Andreas R. (blackpuma)


Lesenswert?

Hallo!

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

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

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

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

4. Wie kann ich einen Pointer übergeben?
1
void LCD_WriteString(const rom char *string);  // Prototyp
2
3
.
4
.
5
char *test;
6
7
test = "Muh";
8
9
LCD_WriteString( test );
10
.
11
.

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

LG
Andreas

von Mark B. (markbrandis)


Lesenswert?

Andreas Riegebauer schrieb:
> Hallo!
>
> Ich habe ein paar Fragen zum C18 für PIC.
>
> 1. Wie kann ich einen Pointer definieren?
>
1
> char* test;   // Variante 1
2
> char *test;   // Variante 2
3
> 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?
>
1
> test  = "Muh";   // Variante 1
2
> 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?
>
1
> *test = "Muh";    // Adresse
2
> 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?
>
1
> void LCD_WriteString(const rom char *string);  // Prototyp
2
> 
3
> .
4
> .
5
> char *test;
6
> 
7
> test = "Muh";
8
> 
9
> LCD_WriteString( test );

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

von Andreas R. (blackpuma)


Lesenswert?

>> 1. Wie kann ich einen Pointer definieren?
1
char* test;   // Variante 1
2
char *test;   // Variante 2
3
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?
1
test  = "Muh";   // Variante 1
2
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?
1
&test = "Muh";

>> 3. Alles was ich mit Stern angebe ist doch die Adresse des Pointers?
1
*test = "Muh";    // Adresse
2
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?
1
void LCD_WriteString(const rom char *string);  // Prototyp
2
.
3
.
4
char *test;
5
6
test = "Muh";
7
8
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?

von Mark B. (markbrandis)


Lesenswert?

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

1
#include <stdio.h>
2
#include <string.h>
3
4
void rueckwaerts(char*);
5
6
int main()
7
{
8
  char string[] = "Hello World";                    // string anlegen
9
  printf("string: %s\n", string);                    // string ausgeben
10
  
11
  char* stringptr;
12
  stringptr = &string[0];                            // Zeiger ausrichten
13
  printf("string ueber pointer: %s\n", stringptr);  // Ausgeben über den Pointer
14
  
15
  rueckwaerts(stringptr);                            // Ausgabe rueckwaerts ueber Funktion
16
  
17
  return 0;
18
}
19
20
void rueckwaerts(char* text)
21
{
22
  char* ptr;
23
  int i = strlen(text) - 1;                          // Länge des Strings über Bibliotheksfunktion
24
  ptr = &text[i];                                    // Zeiger auf letztes Zeichen setzen
25
  
26
  printf("rueckwaerts: ");
27
  while (i>=0)                                      // jetzt rueckwaerts
28
  {
29
    printf("%c", *ptr);                              // und ausgeben
30
    ptr--;                                          // Zeiger um ein Zeichen weiter zurück setzen
31
    i--;
32
  }  
33
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.