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..
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?
Wenn du pt änderst, dann ist die Information wo der Ursprung war weg. Also nimm dafür am besten einen zweiten Zeiger denn du zu Beginn auf die Stelle von pt setzt.
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); }
Du hast doch wohl eine main()-Funktion!? Initalisiere dort den zweiten Pointer: char *text = "Hallo Welt"; volatile char *p = NULL; void main(void) { p=text; } Alternativ könntest du einfach statt dem zweiten Zeiger einen int nehmen und damit die Position im String angeben.
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?
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.
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..
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...
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); } ============================================================
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.