arrayer och pekare i C
Re: arrayer och pekare i C
Kod: Markera allt
char text[] = "abcdef";
int i = 4;
char c = i[text];
Någon som har fler roliga otroliga exempel?
Re: arrayer och pekare i C
märkligt att i[text] blir samma sak som text ... jag ska dock hålla mig till det sistnämnda, om man inte vill göra sitt program totalt oläsligt! 

Re: arrayer och pekare i C
Det är ju också kul att man kan skriva rätt så obegripliga deklarationer:
char (*(*x())[5])();
x blir funktionspekare till funktion som returnerar en array av fem funktionspekare till funktioner som returnerar char...
Tur att man slipper använda sånt så ofta... 
(kolla http://www.cdecl.org/ )
char (*(*x())[5])();
x blir funktionspekare till funktion som returnerar en array av fem funktionspekare till funktioner som returnerar char...


(kolla http://www.cdecl.org/ )
Re: arrayer och pekare i C
Ja "kul" är ju en sak.
Om det även "bra" eller en "fördel" är ju en helt annan...
Om det även "bra" eller en "fördel" är ju en helt annan...
Re: arrayer och pekare i C
Nja, jag tror det beror på pekar-array-ekvivalensen i C, där a är ekvivalent med *(a+b).Nerre skrev:Jag gissar att det beror på att i castas till pekare?
Om kompilatorn då gör om alla a till formen *(a+b) så ser man ju direkt varför
det fungerar.
/johan
Re: arrayer och pekare i C
Jo, det är just det där med att vara lättläst...
Fast pekare till funktioner är mycket användbart!
Fast pekare till funktioner är mycket användbart!
Re: arrayer och pekare i C
Att man kan göra seriösa konstigheter i C är väl ganska välkänd och kan knappast vara en överraskning för vana. Att vissa exempel är till att riva håret över (om man har hår alltså...) är ganska välkänd också - men en bra programmör kan skriva lättläst kod och ska det till konstgrepp som är bortom det mer normala har man ju en massa kommentarer som förklaring.
Re: arrayer och pekare i C
#include kan vara användbart till mycketSvenW skrev:Tråden börjar bli kul. Det där fungerar!!! Tackar.
Någon som har fler roliga otroliga exempel?
Kod: Markera allt
char *countries[] = {
#include "countries.txt"
};
Kod: Markera allt
"sweden","norway","denmark"
Re: arrayer och pekare i C
Nu har jag problem igen med detta.... (se första posten)... eller så är det något annat som spökar.
(AVR GCC):
Jag försöker läsa en sträng från programminnet och ska skriva den strängen till EEPROM.
EEpromadressen ska peka på första strängen i en lista av strängar i EEPROM, dvs en "tvådimensionell array".
Så här ser det ut:
Koden:
Det verkar inte som om den skriver något alls i närheten av rätt adress...
Så jag funderar på vad det är för fel på &EE_profilnamn[0]
Dessutom, i simulatorn, verkar den läsa bara skräptecken från &StrDefault
jag har bytt ut det mot &EE_profilnamn+i men det blir fortfarande lika fel.
Jag vill ha som resultat att i textsträng nummer 0 i EEPROM ska det stå ordet "default":
EE_profilnamn[0] = "default"; (så här, ungefär)
Kan inte förstå vad jag gör för fel...
(AVR GCC):
Jag försöker läsa en sträng från programminnet och ska skriva den strängen till EEPROM.
EEpromadressen ska peka på första strängen i en lista av strängar i EEPROM, dvs en "tvådimensionell array".
Så här ser det ut:
Kod: Markera allt
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
uint8_t PROGMEM StrDefault[] = "default" // strängen i flashminnet
uint8_t EEMEM EE_profilnamn[MAX_ANTAL_PROFILER][PROFILNAMN_LEN]; // en lista i EEPROM
Kod: Markera allt
// skriv namnet 'default' i EE_profilnamn[0]
for (uint8_t i = 0; i < sizeof(StrDefault); i++) { // loopa igenom alla tecken i ordet
uint8_t tecken = pgm_read_byte(&StrDefault[i]); // läs en bokstav från Flashminnet
eeprom_write_byte(&EE_profilnamn[0][i], tecken); // skriv en bokstav i EEPROM
}
Så jag funderar på vad det är för fel på &EE_profilnamn[0]
Dessutom, i simulatorn, verkar den läsa bara skräptecken från &StrDefault
jag har bytt ut det mot &EE_profilnamn+i men det blir fortfarande lika fel.
Jag vill ha som resultat att i textsträng nummer 0 i EEPROM ska det stå ordet "default":
EE_profilnamn[0] = "default"; (så här, ungefär)
Kan inte förstå vad jag gör för fel...

Re: arrayer och pekare i C
Plötsligt fungerar det, efter att jag startade om AVR Studio 4 
Jag har inte ändrat något annat!

Jag har inte ändrat något annat!
Kod: Markera allt
// skriv namnet 'default' i EE_profilnamn[0]
for (uint8_t i = 0; i < sizeof(StrDefault); i++) {
uint8_t tecken = pgm_read_byte(&StrDefault[i]);
eeprom_write_byte(&EE_profilnamn[0][i], tecken);
}
Re: arrayer och pekare i C
Kör du AVR simulator eller AVR simulator 2?
Jag har märkt att Simulator 2 slutar fungera ibland efter ett längre pass. Simulator verkar inte funka alls om programmet har avbrottsrutiner.
Får hoppas att de får till en bättre simulator i AVR Studio 5. Jag kör fortfarande fyran.
Jag har märkt att Simulator 2 slutar fungera ibland efter ett längre pass. Simulator verkar inte funka alls om programmet har avbrottsrutiner.
Får hoppas att de får till en bättre simulator i AVR Studio 5. Jag kör fortfarande fyran.
Re: arrayer och pekare i C
I det här fallet var det nog GCC som strulade - felet uppstod nämligen även i AVR-kretsen, inte bara i simulatorn. Skrämmande om GCC inte klarar av arrayer ibland... 
Eller om det är något annat som strulat till sig... Kan ju vara EEMEM och/eller PROGMEM som strular av nån orsak... i så fall hör det väl till AVR-biblioteken.
Jag har faktiskt inte kört simulatorn så ofta sedan jag bytte till AVR Studio 5, men den har varit väldigt slö och konstig. Jag startade simulatorn enbart för att det inte fungerade 'på riktigt' dvs. i AVR-processorn.
Men simulatorn är också kass: Nu t.ex. så kunde den inte komma igång ordentligt utan började med meddelandet "Hittar ingen källkod - vill du köra disassemblern?", Resetfunktionen (knappen i verktygsraden) var inaktiverad så det fungerade inte heller. Och när jag försökte ändra ett värde i EEPROM fick den krupp och slutade visa något alls... "syntax error" stod det bara i minnesfönstret.

Eller om det är något annat som strulat till sig... Kan ju vara EEMEM och/eller PROGMEM som strular av nån orsak... i så fall hör det väl till AVR-biblioteken.
Jag har faktiskt inte kört simulatorn så ofta sedan jag bytte till AVR Studio 5, men den har varit väldigt slö och konstig. Jag startade simulatorn enbart för att det inte fungerade 'på riktigt' dvs. i AVR-processorn.
Men simulatorn är också kass: Nu t.ex. så kunde den inte komma igång ordentligt utan började med meddelandet "Hittar ingen källkod - vill du köra disassemblern?", Resetfunktionen (knappen i verktygsraden) var inaktiverad så det fungerade inte heller. Och när jag försökte ändra ett värde i EEPROM fick den krupp och slutade visa något alls... "syntax error" stod det bara i minnesfönstret.
