Ist es sicher anzunehmen, dass ein Zeiger die Größe eines int in C hat?

8

Kann man beim Entwurf einer neuen Programmiersprache davon ausgehen, dass ein C int und ein Zeiger auf der Maschine dieselbe Größe haben?

    
compman 01.01.2011, 15:56
quelle

7 Antworten

16

Nein. Ein Zeiger kann größer oder kleiner als eine ganze Zahl sein. Wenn Sie einen Zeiger aus irgendeinem Grund als Ganzzahl übergeben müssen (z. B. Ganzzahl statt Zeiger, Arithmetik), passen sie garantiert in ein intptr_t .

Sie passen nicht garantiert in eine size_t, wie in einer anderen Antwort vorgeschlagen, aber in der Praxis ist es unwahrscheinlich, dass dies nicht der Fall ist, da die größte adressierbare Größe normalerweise der größten adressierbaren Adresse entspricht.

    
user79758 01.01.2011, 17:18
quelle
5

Nein, überhaupt nicht. Viele Compiler haben sie nicht in der gleichen Größe.

    
Puppy 01.01.2011 16:45
quelle
3

Nein, besonders in 64-Bit-Umgebungen:

LP64 Dies deckt * nix-Umgebungen ab, aber das gleiche gilt für Windows für LLP64.

    
Kurtis 01.01.2011 16:35
quelle
1

Ich denke, Sie meinen die Größe der Datentypen, wie sie von der Plattform definiert werden, nicht C lang. Soweit ich weiß, definiert C keine bestimmte Größe für die Datentypen. Die Antwort auf Ihre Frage ist, dass Sie dies nicht annehmen können, zum Beispiel auf win32 sizeof (int) == sizeof (Zeiger) == 4 Bytes jedoch auf win64 sizeof (int) == 4 und sizeof (Zeiger) == 8

    
Gaurav 01.01.2011 16:12
quelle
1

nein, aber ein Zeiger sollte die gleiche Größe wie ein intptr_t haben.

    
dan_waterworth 01.01.2011 16:00
quelle
1

Nein; auf meinem MacOS X 10.6.5. Maschine, ein int ist 32 Bits und ein Zeiger ist standardmäßig 64 Bits.

Wenn Sie eine Ganzzahl mit der richtigen Größe für einen Zeiger benötigen, verwenden Sie #include <inttypes.h> (oder <stdint.h> ) und uintptr_t - vorausgesetzt, Sie haben C99-Unterstützung oder können sie simulieren.

    
Jonathan Leffler 01.01.2011 20:12
quelle
-2

Ich glaube, der Linux-Kernel übergibt Zeiger als vorzeichenlose Longs. Sie sind garantiert mindestens so groß wie ein Zeiger:)

    
tperk 01.01.2011 23:08
quelle

Tags und Links