Wenn du also eine Integer Variable hast, welche auf einem "normalen" 32 Bit System normalerweise 2 Byte belegt..
Ein int hat normalerweise 4 Byte(32 Bit, damit hat auch die Architektur-Bezeichnung 32-Bit zu tun(Ein int hat afaik meistens die Größe eines (Standard-)Registers wie eax,edx,...))
Der Wertebereich ist daher von -2^31 bis 2^31-1.(editiert nach tr0nix Post)
Nicht wirklich: ary[0] ist die erste Variable im Array ary. ary zeigt auf ary[0](ary enthält die Adresse von ary[0]) also sind, wie ich erwähnt habe folgende Ausdrücke gleich:
Code:
foo = ary[0];
/*und*/
foo = *ary;
/*Und die Zeiger:*/
bar = ary;
bar = &(ary[0]);
*ary[0]
Der Inhalt der Adresse vom Inhalt der Adresse von ary[0];
Da keine Adresse enthalten, der direkte Inhalt von ary[0].
Leider auch nicht. Den Ausdruck *ary[0] nehmen die meisten Compiler nicht an, wenn ary ein Array vom Typ int ist. Grund: Du versucht hiermit eine Variable zu dereferenzieren(=als Adresse zu interpretieren und den Inhalt an dieser auszulesen), die kein Zeiger, sondern ein int ist. Wenn man dieses Verhalten so beabsichtigt müsste man das ganze noch typecasten. Normalerweise führt dieser Ausdruck dann aber zu einer segfault, da in dem Array in 90% der Fälle keine gültige Adresse steht. Zur Veranschaulichung mal ein kleines Programm:
Code:
#include <stdio.h>
int main(int argc,char **argv)
{
int i[1] = {0};
int foo = *((int*)i[0]);
return 0;
}
Führt man dieses aus, so stürzt es ab, da versucht wird auf die Adresse 0 zuzugreifen, die bei den meisten OSes ungültig ist:
In i[0] steht eine 0. Dann wird diese als Adresse interpretiert und es wird geschaut, was an der (virtuellen) Adresse 0 steht und das Programm stürzt wegen Zugriffsverletzung ab.
Oder umschrieben: Stell' Dir vor, du hast 10 Schubladen, nummeriert von 1-10 und in jeder liegt ein Zettel mit einer Zahl drauf. *ary[0] wäre jetzt, als würdest du die erste Schublade aufmachen und die Nummer auf dem Zettel(z.B. 157) als Schubladennummer interpretieren und schauen was in der Schublade dieser Nummer liegt. Da es keine Schublade mit der Nummer 157 gibt, stürzt das Programm ab.
Was sehr hilfreich zum Verständnis dieser Thematik ist, ist die Beschäftigung mit Assembly.
Ich hoffe, alle Klarheiten sind damit beseitigt.