Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Beliebiger Zeigertyp als Funktionsparameter?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
25.08.2006, 16:54 Uhr
Yadgar



High!

Im "Aupperle" knobele ich jetzt an einer Aufgabe, in der eine Funktion programmiert werden, soll, die einen beliebigen(!) Zeiger übergeben bekommt und ihn bei Übereinstimmung seiner Größe mit sizeof(int) mit reinterpret_cast in ein int wandelt...

...ist es überhaupt möglich, Zeiger auf beliebige Objekte als Übergabetyp zu deklarieren?

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.08.2006, 17:14 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


hab ich nie probiert.
mal void* probiert?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.08.2006, 17:28 Uhr
Yadgar



High!


Zitat von Windalf:
mal void* probiert?


Stimmt, das wäre eine Möglichkeit... eigentlich müßte ein Zeiger nach einer Wandlung in void* noch seine ursprüngliche Bitgröße haben - oder täusche ich mich da?

Ach ja, und "Windalf"... irgendwie stelle ich mir jetzt einen langbärtigen Bill Gates mit spitzem Hut, eichenem Wanderstab und wehendem Umhang vor!

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog

Dieser Post wurde am 25.08.2006 um 17:34 Uhr von Yadgar editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.08.2006, 17:51 Uhr
~Blubber2063
Gast


Wenn die funktion für jeden Zeigertyp arbeiten muss, dann ist void* die einzige Möglichkeit und die größe eines Zeigers ist auf der selben Plattform immer gleich gross, also entweder der int hat die nötige Größe oder nicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.08.2006, 18:31 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Also

Zeiger sind auf gleicher HardwareArchitektur immer gleich groß:


C++:
char *i;
short *j;
int *k;
void *l;

sizeof(i) == sizeof(j) == sizeof(k) == sizeof(l)



(4 bei 32bit, bei 64bit 8)

Zeiger sind ja nur Speicheradressen, dahinter kann sonstwas stehen. Im Endeffekt braucht man die "typisierten" Zeiger ja nur aus Lesbarkeit
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.08.2006, 20:49 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Ach ja, und "Windalf"... irgendwie stelle ich mir jetzt einen langbärtigen Bill Gates mit spitzem Hut, eichenem Wanderstab und wehendem Umhang vor!


Eher ein Clown im Anzug (nur die rote Nase fehlt) der anderen glaubt die Welt erklären zu müssen, dadurch wenig Freizeit hat aber recht gut bezahlt bekommt ein bisschen mit Excel udn Powerpoint rumzuklicken, was sich aber dank Steuertarif und Sozialabgaben so gar nicht lohnt...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
25.08.2006, 21:18 Uhr
Yadgar



High!


Zitat von FloSoft:
Also

Zeiger sind auf gleicher HardwareArchitektur immer gleich groß:


C++:
char *i;
short *j;
int *k;
void *l;

sizeof(i) == sizeof(j) == sizeof(k) == sizeof(l)





Ja, das habe ich mittlerweile auch festgestellt... folglich war die Aufgabenstellung nicht sehr sinnvoll...

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
26.08.2006, 01:28 Uhr
2cHH



Hallo,


kann gut sein, dass ich an dem Sinn der Aufagbe vorbeidenke, aber:

Zeiger selbst sind natürlich immer gleich gross, aber auch nach einem Cast zu (Void*) kann man sie immer noch dereferenzieren.

Geht das nicht?


Code:
char *i;
short *j;
int *k;
void *l;

i = (void*) i;
j = (void*) j;
k = (void*) k;

//bei 32-Bit
( sizeof(*i) != sizeof(*j)  !=  sizeof(*k) ) == TRUE;

//nur das geht imho nicht gut
int x;
x = *l;



--
greetz,
2cHH
_____________

Dieser Post wurde am 26.08.2006 um 01:38 Uhr von 2cHH editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
26.08.2006, 08:16 Uhr
(un)wissender
Niveauwart



C++:
template<class T>
int toInt(T * z)
{
  return reinterpret_cast<int>(z);
}


--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
26.08.2006, 11:30 Uhr
2cHH




Zitat von (un)wissender:

C++:
template<class T>
int toInt(T * z)
{
  return reinterpret_cast<int>(z);
}






Hi,

ich habe von C++ nicht viel Ahnung, soll das heissen, dass C++, weil es beim Cast zu int den Zeiger ändert, es das auch beim Cast zu Void macht?

Das wäre imho erstens nicht unbedingt von Vorteil und zweitens wäre dann in C++ auch nicht mehr "alles was auch in C geht" möglich:


Code:
int n;

int main(int argc, char **argv)
    {
    char *pChar;
    int *pInt;
    pChar = (void*) pChar;
    pInt = (void*) pInt;
    printf("%d\n", sizeof(*pChar));    
    printf("%d\n", sizeof(*pInt));
    fflush(stdin);
    getch();
    }





Da werden bei meinem gcc einmal 1 (char) und einmal 4 (int) ausgegeben.


Oder bedeutet das etwas anderes und man kann damit bei C++ die Casts beeinflussen?
--
greetz,
2cHH
_____________

Dieser Post wurde am 26.08.2006 um 11:36 Uhr von 2cHH editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: