Fragen zu C

L

Linthorul

Arch Luxer
Hallo,

ich habe (nochmal) zwei Fragen zu C

1. was ist der Unterschied zwischen *x und &c ?
2. gibt es einen Unterschied zwischen return (0); und return 0; ?
 
&c ist die adresse von c
*x ist das byte / die bytes, die x addressiert
bsp:
Code:
int c = 0;
int *x;
x = &c;
*x = 1;

//c hat jetzt den wert 1
 
Zwischen "return X" und "return (X)" gibt es keinen Unterschied. Du kannst so viele Klammern setzen wie du willst ;).

Wegen Pointern: Aus Erfahrung weiß ich, dass das ein schwieriges Thema für Einsteiger ist, aber nicht aufgeben ;) Wenn man weiß wie sie funktionieren, kann echt tolle Sachen mit machen.
 
Danke für die Antworten. :)

&c ist die adresse von c
*x ist das byte / die bytes, die x addressiert
bsp:
Code:
int c = 0;
int *x;
x = &c;
*x = 1;

//c hat jetzt den wert 1
Danke
(eigentlich hab ich nen Tippfehler gehabt und meine Unterschied zwischen *x und &x)
also hab ich das so richtig verstanden:
1. c wird inititalisiert/definiert und c wird der Wert 0 zugewiesen
2. das Byte, das x adressiert, wird zugewiesen
3. x wird die Adresse von c zugewiesen
4. der Adresse von x wird der Wert 1 zugewiesen
5. dadurch das c die Adresse von x hat, hat sie auch den Wert von x

*x ist das byte / die bytes, die x addressiert
Das hab ich noch nicht so verstanden
Was ist das Byte das x adressiert. Hat es den selben Wert wie die Adresse von x?

Und ich wollte jetzt mal selbst den Unterschied &x und *x herausfinden, aber ich erhalte nur ein Segmentetion Fault als Ausgabe :(
Code:
#include <stdio.h>
int main(void) {
	int *x;
	*x = 2;
	printf("%p\n",&x);
	printf("%p\n",*x);
	printf("%i\n",&x);
	printf("%i\n",*x);
	return 0;
}

Zwischen "return X" und "return (X)" gibt es keinen Unterschied. Du kannst so viele Klammern setzen wie du willst ;).
Ok weil ich hab in NetBSD ein return (1); gefunden, wass in OpenBSD zu einem return 1; geändert wurde, also könnte man das ja auch bei NetBSD ändern^^

Wegen Pointern: Aus Erfahrung weiß ich, dass das ein schwieriges Thema für Einsteiger ist, aber nicht aufgeben ;) Wenn man weiß wie sie funktionieren, kann echt tolle Sachen mit machen.
Ja das ist auch mein Problem

Ich bin die Anleitung des C Wikibooks durchgegangen und hab jetzt auch schon im C von A bis Z Openbook nachgeschaut aber wirklich verstanden hab ich es noch nicht

thacrazze
 
Und ich wollte jetzt mal selbst den Unterschied &x und *x herausfinden, aber ich erhalte nur ein Segmentetion Fault als Ausgabe

Verständlich, da du zwar den Pointer definierst, ihm aber keinen Speicherbereich zuweist. Entweder du machst es wie im Post von RedEagle, weist ihm also die Adresse einer anderen Variable zu, oder du reservierst den Speicher mit malloc

Code:
...
int *x;
x = malloc(sizeof(int));
*x = 2;
...

für malloc musst du noch die stdlib.h einbinden

Zitat:
*x ist das byte / die bytes, die x addressiert
Das hab ich noch nicht so verstanden
Was ist das Byte das x adressiert. Hat es den selben Wert wie die Adresse von x?

Das ist auch etwas unglücklich vormuliert. Der Begriff Byte hat hier schon mal nichts verloren. Ein Byte ist in C ein char (da dieser Datentyp eine Breite von 8 Bits hat). Ein Pointer kann aber auf jeden beliebigen Datentypen zeigen.

Nochmal die Erklärung:
Du hast einen Pointer, der irgendwo im Speicher liegt und in dem eine Adresse gespeichert ist. Diese Adresse ist der Ort, an dem die eigentliche Information gespeichert ist, mit der du arbeiten willst (behaupte ich mal einfach so, kann in wirklichkeit noch komplexer sein). Angenommen du hast einen Pointer x, der auf eine Integervariable zeigt, dann bekommst du mit

x die Adresse wo der Wert des Integers gespeichert ist
*x den Wert des Integers
 
Zuletzt bearbeitet:

Ähnliche Themen

Schwachstelle in C-Bibliothek: Looney Tunables gefährdet zahlreiche Linux-Systeme

Schwachstelle in C-Bibliothek: Looney Tunables gefährdet zahlreiche Linux-Systeme (Update)

Ampere Computing: Zweimal 192 Kerne sind schon zu viel für Linux

Linux 6.1 LTS mit Rust: Linus Torvalds hat den neuen Systemkernel freigegeben

Heroic Games Launcher 2.9: Amazon-Games-App-Spiele sind unter Linux verwaltbar

Zurück
Oben