Diskussion:C-Programmierung: Zeiger
Aus Wikibooks
[Bearbeiten] Wie kommt man in Visual Basic ohne Zeiger aus?
Hat jemand eine Ahnung, wie man in Visual Basic ohne Datenstrukturen wie verkette Listen auskommt? -- Daniel B 17:12, 8. Sep 2004 (UTC)
[Bearbeiten] Funktionen sollten nicht im Kapitel für Zeiger erklärt werden!
Ab der Überschrift "Unterschied zwischen Call by Value & Call by Reference" bis hin zu "swap()" kann alles gelöscht oder zu den Beispielen im Kapitel "Funktionen" verschoben werden, da dies nichts mit dem Kapitel über Zeiger zu tun hat. Könnte sein das der vorherige Autor einfach nur den Unterschied aufzeigen wollte oder einen einfacheren Übergang zu seinem/ihren Beispiel mit dem swap() haben wollte (auch wenn seine/ihre alte Überschrift überhaupt nicht gepasst hat). Also am besten weg damit und ab der Überschift einfach neu schreiben oder den bereits vorhandenen Text abändern und/oder ergänzen. Jeder Anfänger der dieses Buch liest/(lesen wird) wäre dem/der/denen-jenigen für die Arbeit an der überarbeitung sicherlich überaus dankbar. :)
[Bearbeiten] Beispiel für Zeigerarithmetik falsch?
Ob es nun komplett falsch ist, kann ich anhand meines bisherigen Kenntnissstandes über C nicht beurteilen. Es ist jedoch nicht allgemein gültig.
Ich habe das Beispiel einmal genauso, wie es im Artikel steht, versucht zu kompilieren und bekomme folgende Fehlermeldungen:
zeiger-arithmetik.c: In function ‘main’: zeiger-arithmetik.c:5: error: ‘new’ undeclared (first use in this function) zeiger-arithmetik.c:5: error: (Each undeclared identifier is reported only once zeiger-arithmetik.c:5: error: for each function it appears in.) zeiger-arithmetik.c:5: error: expected ‘,’ or ‘;’ before ‘int’
Diese Ausgaben kommen von gcc im ANSI-C89-Modus (gcc -std=c89), auch C99 (gcc -std=c99). Soweit erscheint mir das auch vollkommen verständlich. Wenn es sich nur um ein fiktives Beispiel handeln sollte, wäre eine Kennzeichnung als solches wünschenswert. Aber ein wirklich funktionierendes Beispiel wäre deutlich besser.
Da ich noch nicht alles begriffen habe, werde ich erst einmal den Artikel nicht selber bearbeiten, aber meinen Vorschlag für ein funktionierendes Beispiel hier unterbreiten:
-
#include <stdio.h> -
-
int main(void)
-
{ -
unsigned int *i;
-
*i=5;
-
printf("Speicheradresse %u enthält %u\n",i,*i);
-
i++; // nächste Adresse lesen
-
printf("Speicheradresse %u enthält %u\n",i,*i);
-
-
return 0;
-
}
Die Ausgabe ist allerdings etwas anders:
Speicheradresse 3086544884 enthält 5 Speicheradresse 3086544888 enthält 3086672512
Im originalen Beispiel habe ich ohnehin nicht verstanden, warum plötzlich *i == 0 sein soll, es wird doch der Inhalt der nächsten Speicherzelle ausgelesen, der ja davon abhängt, was da gerade drin steht. Eine sonsitge Wertzuweisung oder Initialisierung für diese Zelle ist ja nicht erfolgt. -- Marcus 85.183.158.220 15:03, 11. Sep. 2007 (CEST)
[Bearbeiten] Fehlerteufel
Tach!
Unter "3 Zeiger auf Funktionen" steht unter dem ersten Beispiel geschrieben: "Anstelle des Namens der Funktion tritt der Zeiger." Klingt irgendwie verwirrend. Mag das mal jemand berichtigen? :)
Gruss, Levent
[Bearbeiten] Beispiel der Zeiger in Funktionen
Hallo. Ich finde das Beispiel mit den Zeigern in Funktionen unpassend. Darin kommt eine Rekursion vor, obwohl das Thema erst einige Kapitel später behandelt wird. Um Zeiger zu verstehen bedarf es einer gewissen Zeit. Ich finde, dass die Rekursion das Thema erst kompliziert macht.
Da ich dir nicht ins Handwerk pfuschen will, überlasse ich es dir, das Beispiel zu ändern.
[Bearbeiten] Bezeichnung "Call By Reference" ist nicht unproblematisch
Im Text steht "In vielen Büchern wird ein solcher Aufruf auch als Call By Reference bezeichnet. Diese Bezeichnung ist aber nicht unproblematisch" Wie lautet denn dann die richtiige Bezeichnung dafür?
[Bearbeiten] Zeiger auf Funktionen
Hallo! Ich versteh nicht ganz, was mir ein Zeiger auf eine Funktion bringen soll... MoB der 1. 16:55, 5. Jan. 2009 (CET)
[Bearbeiten] Abschnitt: Werte an Funktionen übergeben
Der Abschnitt Werte an Funktionen übergeben mag ja inhaltlich sehr gut sein. Aber was hat das mit Zeigern zu tun? Irgendwie nicht sehr viel ... --WissensDürster 12:06, 21. Feb. 2009 (CET)
[Bearbeiten] Bezeichnung ist falsch
Original:
printf("Inhalt der Variablen b: %i\n", b);
printf("Inhalt der Variablen a: %i\n", *a);
printf("Adresse der Variablen b: %p\n", &b);
printf("Adresse der Variablen a: %p\n", (void *)a);
IMHO besser:
printf("Inhalt der Variablen b: %i\n", b);
printf("Inhalt des Speichers, auf den a zeigt: %i\n", *a);
printf("Adresse der Variablen b: %p\n", &b);
printf("Gespeicherte Adresse in der Variable a: %p\n", (void *)a);
--195.72.96.249 11:03, 20. Nov. 2009 (CET)