C Pointer frage..

Gast #6273
Lesenswert?
• ▲
▼
hallo,
habe ein kleines c problem mit pointer und zwar:
warum kann ich ausserhalb einer funktion der variablen "apt"
die adresse des arrays[0] übergeben? der compiler schmeisst immer ein 
fehler.
hintergrund der ganzen sache ist, das ich diesen pointer über mehrere 
C-Dateien benutzten möchte. also muss ích den irgendwie global 
definieren. geht aber irgendwie nicht..:(..weiss jemand wieso?...setzte 
ich die 3te zeile in eine funktion gehts..aber dann ist der pointer 
wieder nicht global..


extern unsigned char array[10] = "Hallo Welt";
extern unsigned char *apt;

apt=&array[0];  <<--das bekomme ich nicht global hin..
Gast #6274
Lesenswert?
• ▲
▼
ok...hab das problem anders gelöst..jetzt hab ich aber ein nächstes..:)
und zwar:

unsigned *char = "Hallo Welt"

*char++;

wie kann ich am einfachsten nach dem hochzählen den pointer wieder auf 
den ursprung setzten?
Gast #6277
Lesenswert?
• ▲
▼
hab ich auch schon gedacht..geht aber leider nicht.

ich habe eine interrupt routine in der der pointer jedesmal um eins 
erhöht wird. ist der pointer am ende des strings, soll er zurück gesetzt 
werden. d.h ich müsste den original pointer vor der interrupt routine 
umladen. das kann ich aber nicht da ich vorher keine funktion mehr habe 
wo ich den umladen könnte.

ich poste mal meinen code:

char *chab = "Hallo Welt";

hier müsste ich eigentlich den pointer umladen.
geht aber nicht, da ich nicht in einer funktion bin.


SIGNAL(SIG_OVERFLOW0)
{



    if (*chab)
    {
    i=*chab++;
    lcdsetcur(4,j++);
    lcdputchar(i);
    }
    else
    {
    lcdclearline(4);
    j = 1;

                HIER MÜSSTE DER POINTER ZURÜCKGESETZT WERDEN

    }




}


outp(0,TCNT0);

}
Gast #6279
Lesenswert?
• ▲
▼
die zweite alternative ist klar. ich versuche nur ein wenig mit pointern 
umzugehen...:)

das problem sehe ich gerade ist ein ganz anderes.
und zwar wenn ich eine variable global über der main funktion definiere, 
findet er die variable nicht mehr in einer anderen c datei. die 
funktionen in der angefügten c datei kann ich aus der main funktion 
aufrufen aber ich kann die globalen variablen nicht aus der c main datei 
nutzten. könnte das an dem makefile liegen?
Gast #6280
Lesenswert?
• ▲
▼
Kannst du wohl.
Du musst die Variable in der anderen Datei lediglich bekannt machen mit

extern char *chab;

Damit weiss der Compiler, dass irgendwo eine Variable chab vom Typ 
Zeiger auf char deklariert ist.
In der Originaldatei darf chab dann eigentlich nur nicht als static 
deklariert werden, dann geht's.


Zu deinem ersten Problem: Das mit den extern Deklarationen geht so 
nicht, da wird nämlich kein Platz für die Variablen reserviert.
So müsste es gehen:

unsigned char array[] = "Hallo Welt";
unsigned char *apt = array;
oder
unsigned char *apt = &array[0]; // Adresse des ersten Elementes

Ach, und übrigens, mit dem makefile hat das gar nichts zu tun.

Gruss
Christian

P.S. Ich empfehle dir gern mal die Durcharbeitung meines C-Tutorials auf 
dieser Seite unter Artikel.
Gast #6281
Lesenswert?
• ▲
▼
hi christian,

danke für deine hilfe...aber irgendwie scheint das ein seltsames problem 
zu sein.

wenn ich die variable mit extern definiere geht es trotzdem nicht. er 
findet die einfach nicht.

main c-datei;

extern unsigned char test = 0x00;

int main(void)
{

   tuewas();

   for(;;);


}



andere c datei:


void tuewas(void)
{
  outp(0xFF,DDRB);
  test = 0x12;
  outp(test,PORTB);

}

die funtion findet er und sie fumtioniert auch..nur wenn ich die 
variable mit einbringe gehts net..
Gast #6283
Lesenswert?
• ▲
▼
das ganze geht zwar jetzt da ich die variable in der anderen c datei 
definiert habe. aber was soll das??...jetzt kann ich die variable nicht 
mehr in der main funktion benutzen..:))...
ich kann mein problem zwar auch anders lösen aber das müsste doch gehen 
oder etwa nicht? das stört mich jetzt ein wenig...
Gast #6284
Lesenswert?
• ▲
▼
So muss das sein!

main c-datei;
=========================================================
// Hier wird der Platz fuer die Variable alloziert
unsigned char test = 0x00;    // Kein extern hier!!!!!!!


int main(void)
{

   tuewas();

   for(;;);


}
============================================================


andere c datei:
============================================================
// Dies ist lediglich eine Referenz auf die Variable.
extern unsigned char test;   // Hier muss das extern hin!!!!

void tuewas(void)
{
  outp(0xFF,DDRB);
  test = 0x12;
  outp(test,PORTB);

}
============================================================

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren