Software > Coding
Abfrage freier Speicher / TOS 2.06
mfro:
--- Zitat von: HamSTer am Sa 04.05.2013, 22:31:04 ---
CookieJarPtr , ist demnach Verweis auf Verweis
Wie tief kann sowas gehen?
--- Ende Zitat ---
So tief man will (oder versteht). Zeiger sind die Grundbausteine für Arrays. So was geht z.B. auch:
--- Code: ---int multi_array[8][8][8][8][8][8][8][8];
int main(int argc, char *argv[])
{
multi_array[0][0][0][3][3][3][3][3] = 0;
}
--- Ende Code ---
Benutzen tut's nur der, der's braucht, mehr als drei Dimensionen sind schwer vorzustellen ;)
simonsunnyboy:
Übliche Programmierpraxis ist ist bei Pointern nicht tiefer als zwei Ebenen zu gehen, also maximal "Pointer auf pointer". 3 Ebenen in einem Pointer als z.B. ***p habe ich z.B. aktiv noch nicht gesehen.
HamSTer:
Ich stell hier einfach weiter frech fragen rein..
Bitfelder erschliessen sich mir noch nicht so ganz. Ist zB Folgendes erlaubt?
--- Code: ---struct bla {
unsigned : 4;
unsigned kbshift: 1;
unsigned bell : 1;
unsigned repeat : 1;
unsigned click : 1;
} conterm = &0x484;
if (conterm.bell) printf("glocke ist an");
--- Ende Code ---
mfro:
--- Zitat von: HamSTer am Mo 13.05.2013, 15:34:01 ---Ich stell hier einfach weiter frech fragen rein..
Bitfelder erschliessen sich mir noch nicht so ganz. Ist zB Folgendes erlaubt?
--- Code: ---struct bla {
unsigned : 4;
unsigned kbshift: 1;
unsigned bell : 1;
unsigned repeat : 1;
unsigned click : 1;
} conterm = &0x484;
if (conterm.bell) printf("glocke ist an");
--- Ende Code ---
--- Ende Zitat ---
Nö. Aber fast richtig.
Es gibt in C keine Funktionalität, um eine Variable an einer absoluten Adresse zu deklarieren.
Was geht, ist folgendes:
--- Code: ---struct bla {
unsigned : 4;
unsigned kbshift: 1;
unsigned bell : 1;
unsigned repeat : 1;
unsigned click : 1;
} *conterm = (struct bla *) 0x484;
if (conterm->bell) printf("glocke ist an");
--- Ende Code ---
Das sollte mit den meisten Atari-Compilern funktionieren, ist aber nicht garantiert. Der C-Standard schreibt nicht vor, ob Bitfelder "von links" oder "von rechts" gezählt werden. Das bleibt dem Compilerschreiber überlassen.
Ein m68k-Compilerbauer würde sich das Leben aber unnötig schwer machen, wenn er die Bitfelder anders herum zählen würde, als der m68k-Prozessor selbst das (bei bset/bclr beispielsweise) tut.
HamSTer:
so funktioniert es nun auch:
--- Code: ---#include <stdio.h>
#include <tos.h>
#include <stdlib.h>
typedef struct {
unsigned frei: 4;
unsigned kbshift: 1;
unsigned bell: 1;
unsigned repeat: 1;
unsigned click: 1;
} conterm;
int main(void){
long *oldstack;
conterm *wat = (void *) 0x484;
oldstack = (long *) Super(0x0);
if (wat->bell) printf("glocke ist an");
Super((void*) oldstack);
return EXIT_SUCCESS;
}
--- Ende Code ---
Ich denke ich werde einfach alle Kapitel ab den Zeigern aufwärts nochmals lesen müssen :o
EDIT: Compilat angehängt
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln