Wenn die Verwendung * in pointer-Zuweisung?

Wie Lerne ich C sehe ich oft Hinweise.

Ich, dass ein Zeiger hält den hexadezimalen Wert einer bestimmten Speicherort im Arbeitsspeicher. So ein Zeiger ist nichts anderes als z.B.:0x7fff5fbff85c

Jeden Zeiger ist auch ein eigener Typ.

int var = 10;
int *ptr = &var;

Ptr hier Punkte, um die Lage des var. Um den Wert von var ich habe zu dereferenzieren Sie den Zeiger mit *ptr.
Wie

printf("Var = %d", *ptr);

drucken würde `Var = 10;

Aber Wenn ich einen nicht-inline-Deklaration eines Zeigers wie:

int var = 10;
int *ptr;
ptr = &var;

Habe ich nicht verwenden Sie die * in der Dritten Zeile, wenn ich wirklich die Zuordnung der memory-Adresse auf die Zeiger.
Aber wenn ich eine Funktion, die einen Zeiger:

int var = 10;
void assignPointer(int *ptr) {
*ptr = 10;
}

Oh, warten Sie! Da ich dies Schreibe, habe ich erkannt, dass es zwei verschiedene Einsätze für Zeiger:

*ptr = 10;

und

ptr = &var;

Was ist der Unterschied? Bin ich im ersten Fall zuerst die Dereferenzierung der Zeiger zuweisen 10 die Lage, dass Ihr ein festhalten?
Und im zweiten Fall, ich bin die Zuweisung der tatsächlichen Lage auf den Zeiger.

Ich bin ein bisschen verwirrt, Wann der * und wenn nicht in Bezug auf die Zuordnung.

Und wenn ich mich mit arrays zu arbeiten, deshalb brauche ich Zeiger überhaupt?

int array[];

"array" ist hier bereits im Besitz der hexadezimale Speicheradresse. Machen nicht, dass es ein Zeiger? Also, Wenn ich wollte, um etwas zu ordnen array würde ich nicht schreiben:

*array = [10, 2];

Zuerst bin ich dereferenzieren, dann bin ich zuordnen.

Ich bin verloren 🙁

EDIT: Vielleicht ist es ein bisschen unklar.
Ich weiß nicht, wenn Sie müssen, verwenden Sie ein *, wenn Sie arbeiten mit Zeigern ein, wenn nicht.
Alles, was zu tragen ist eine hexadezimale ist ein Zeiger richtig?
Der name der variable ein array ist, tragen Sie die hexadezimale Speicheradresse. Also warum nicht ist es ein Zeiger?

EDIT2: Danke Leute habt mir sehr geholfen!

  • Ich sehe eine lange intro-Zeiger hier.. Was ist die Frage? Arrays sind keine Zeiger.
  • Bitte starten Sie mit einem guten C-Buch...Sie brauchen das.
  • Es gibt entweder zu viele mögliche Antworten, oder eine gute Antwort darauf wäre zu lang für dieses format. Bitte fügen Sie details zu schmal die Antwort setzen oder zu isolieren, ein Problem, das kann beantwortet werden, in ein paar Absätze.
  • Grob gesprochen: x ist der Wert des Zeigers *x ist der Wert der Sache wies der Zeiger. Und nicht mixup Deklaration eines Zeigers (int *p;) und mit dem Zeiger bereits deklariert ist (z.B. *x = 5; oder x = &value;)
  • Die Verwirrung kommt von int *ptr = &var; definiert int *ptr und setzt seinen Wert auf &var. Wenn Sie bereits definiert den Mauszeiger, weisen Sie es mit ptr = &var. Verwenden Sie die * zu derefernce den Zeiger, ie auf was es verweist. So ptr ist vielleicht 0xffeebbcc und *ptr ist 10.
  • "Alles, was zu tragen ist eine hexadezimale ist ein Zeiger, richtig?" Nein - es ist keine hexadezimale im inneren der Maschine. Hex ist ein menschlich lesbares format wird beim drucken von einem Zeiger mit der %p - format, aber Sie können drucken Sie eine int im hex auch mit %x - format.
  • Oh, wait! As I'm writing this I recognized that there are two different assignments for pointers: Sie lustig sind. 1) *ptr = 10; und ptr = &var; nichts gemeinsam hat. Es sind zwei verschiedene Dinge. 2) Holen Sie sich ein gutes Buch.

InformationsquelleAutor user148013 | 2016-05-10
Schreibe einen Kommentar