Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

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}}
tux/arrays_vs_pointer.1323633523.txt.gz (6960 views) · Zuletzt geändert: 2011/12/11 20:58 von wikisysop
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0