Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
tux:arrays_vs_pointer [2011/12/11 20:58] wikisysop |
tux:arrays_vs_pointer [2011/12/15 19:51] (aktuell) wikisysop |
||
---|---|---|---|
Zeile 6: | Zeile 6: | ||
int main() { | int main() { | ||
- | char carray1[3] = {'a', 'b', 'c'}; | + | char carray[3] = {'a', 'b', 'c'}; |
int iarray[3] = {1,2,3}; | int iarray[3] = {1,2,3}; | ||
char *c = "abc"; | char *c = "abc"; | ||
- | int *i = &iarray[1]; | ||
return 0; | return 0; | ||
}</code> | }</code> | ||
- | ~~DISCUSSION:off~~ | + | In der Fachliteratur wird keine Möglichkeit ausgelassen um darauf hinzuweisen, dass Arrays keine Zeiger sind. Zugegeben, ich wär in der ersten Überlegung auch nicht darauf gekommen, dass es Zeiger sein könnten. Demnach habe ich mir mal Zeiger und Arrays genauer angeschaut: |
+ | |||
+ | <xterm>(gdb) <fc #008000>disas main</fc> | ||
+ | ... | ||
+ | 0x0804839a <fc #0000FF><main+6></fc>: mov BYTE PTR [ebp-0xb],0x61 | ||
+ | 0x0804839e <fc #0000FF><main+10></fc>: mov BYTE PTR [ebp-0xa],0x62 | ||
+ | 0x080483a2 <fc #0000FF><main+14></fc>: mov BYTE PTR [ebp-0x9],0x63 | ||
+ | 0x080483a6 <main+18>: mov DWORD PTR [ebp-0x18],0x1 | ||
+ | 0x080483ad <main+25>: mov DWORD PTR [ebp-0x14],0x2 | ||
+ | 0x080483b4 <main+32>: mov DWORD PTR [ebp-0x10],0x3 | ||
+ | 0x080483bb <fc #800000><main+39></fc>: mov DWORD PTR [ebp-0x8],<fc #800000>0x8048490</fc> | ||
+ | ...</xterm> | ||
+ | |||
+ | Interessant sind hierbei die Zeilen <fc #0000FF><main+6></fc>, <fc #0000FF><main+10></fc>, <fc #0000FF><main+14></fc> und die Zeile <fc #800000><main+39></fc>. In den ersten drei Zeilen wird das >><fc #0000FF>carray</fc><< initialisiert. Man erkennt, dass das Array in lauter Zeiger zerfällt, welche auf jeweils ein Element des Arrays zeigen. Dagegen wird in der Zeile, wo der char-Zeiger >><fc #800000>c</fc><< initialisiert wird, nur die Adresse <fc #800000>0x8048490</fc> übergeben, in der der Inhalt steht: | ||
+ | |||
+ | <xterm>(gdb) <fc #008000>x/s 0x8048490</fc> | ||
+ | 0x8048490: "abc"</xterm> | ||
+ | |||
+ | --- //pronto 2011/12/11 15:04// | ||
+ | {{keywords>array pointer zeiger c}} |