zeiger in c?


01.12.2023, 23:33

bzw wie würde man das am besten in worten ausdrücken? struct student zeigt auf student 1 aber selbst das sagt mir nicht was das heißen soll

5 Antworten

student1 ist ein Zeiger auf einen Wert vom Typ struct student.

Der Zeiger ist darum dort weil malloc einen Zeiger zurück gibt somit kann da nur ein Zeiger hin kommen.

Allerdings ist mir etwas schleiferhaft warum name hier als Datentyp int hat. Idr ist das ein char*

Würdest du den Source etwas umschreiben, wäre es für dich vielleicth leichter verständlich:

struct student* student1 =malloc(sizeof (struct student));

Wobei ich nicht glaube, dass das allererste struct notwendig ist.

KarlRanseierIII  02.12.2023, 00:15
Wobei ich nicht glaube, dass das allererste struct notwendig ist.

Doch, das wird schon benötigt.

1

Zeiger sind Verweise - soweit so einfach.

struct student{
    int *name; /* Das ollte eher char * name sein */
    char geschlecht;
};

Zu Deiner Frage bezüglich:

struct student *student1 =malloc(sizeof (struct student));

student1 ist ein Zeiger auf einen struct student, es gibt da ein nettes Werkzeug, wenn man mal nen Hänger hat:

Cdecl Gibberish to English.

    if (student1 ==0){

Auch wenn der C-Standard sagt, daß 0 einem NULL entsprechen soll, NULL wäre aussagekräftiger und wird eh zur Compilezeit ersetzt.

Randnotiz, Wenn Du NULL schon nicht ausschreibst, kannst du genauso gut:

if (!student1)

schreiben. Wenn schon dreckig, dann bitte richtig dreckig :-D.

kabik334 
Fragesteller
 02.12.2023, 16:15

also diese website ist ja echt mega nur was heißt jetzt

declare student1 as pointer to struct student? Sowie ich es versthe ist student1 ein zeiger auf den struct .Aber was genau macht des hat damit student1 zugriff auf den struct einfach ausgedrückt?

0
KarlRanseierIII  02.12.2023, 16:35
@kabik334

Ja, Du mußt allerdings student1 dereferenzieren, um auf die entsprechende struct zuzugreifen.

struct student person1; /* eine struct auf dem Stack */
struct student *student1; /* Zeiger auf eine struct vom Typ student.
student1=&person1; /* Hinterlege Adresse von struct person1 im Zeiger */

person1.geschlecht='W'; /* Zuweisung an person1 */
(*student1).geschlecht='M'; /* dito, * dereferenziert */
student1->geschlecht='D'; /* -> shorthand für (*). */

Am besten schaust Du Dir mal in einem brauchbaren Buch das Kapitel über Pointer udn Pointerarithmetik an.

0

Zeiger sind erstmal Variablen, die statt einem vorab typisierten Inhalt auf einen Speicherbereich zeigen.

Mit

struct student *student1

definierst Du einen Zeiger vom Typ struct student, der vorher definiert wurde und weißt diesem Zeiger einen Speicherbereich mit malloc() zu.

Du generelle Struktur des Codes finde ich etwas schwierig. Ich würde name eher als char(-Array) definieren und geschlecht eher als int bzw. als enum.

kabik334 
Fragesteller
 01.12.2023, 23:34

das mit dem name ist wohl ein fehler müsste ein char sein.

0

Die zwei Zeiger haben den Sinn, dass über sie Speicher auf dem Heap angefordert wird. Für den Namen würde ich ein Feld aus char , statt aus int nehmen.

Woher ich das weiß:Hobby