Simple Frage zu Klassen

  • RE: Simple Frage zu Klassen

    das '*' "Sternchen" ist ein Operator der Sprache Objective C bzw C und gibt in dem Falle an das die Variable vom Typ 'NSString' als ein Pointer geführt wird.

    um das genau zu verstehen was Pointervariablen sind und warum zb in Objective C alle Variablen die auf Objecte verweisen Pointer sind ist nciht unbedingt einfach mal so zu erklären...

    ich empfehle mal im Netz nach einen kleinen Anfängertutorial für 'C' zu suchen in spezielen die abschnitte "Zeigervariablen" bzw halt Pointer in C
    snafu
    :() { :|: &};:
    sometimes i dream in hex
    Obey gravity! Because its a law!
  • Das wichtigste hat Chartus schon gesagt, und Du solltest da wirklich mal ein bischen lesen.

    Wenn man "NSString" (ganz ohne Stern) sagt, dann meint man wirklich die Klasse selbst

    Mit * meint man eine Zeiger auf die Klasse. Das ist ein bischen so wie "Köln" und ein "Wegweiser nach Köln"
    Und das ist vielleicht gar kein SOOO schlechter Vergleich: Wegweiser nach Köln lassen sich einfacher verschieben oder vervielfältigen als Köln.

    Aber, wie gesagt, eine vollständige Erklärung sprengt den Rahmen dieses Threads.

    Ales
    The only thing that really worried me was the ether.
  • weil der Operator zum Typ gehört
    er qualifiziert den Typen "NSString" zu "NSString*"
    deswegen wird er zum Typen 'geklammert'

    ein cast auf einen anderen Typen wird ja genauso geklammert

    zb ein unsigned char * zeichen;
    auf (signed char *) zeichen

    theoretisch kann man die Klammern teilweise weglassen aber um es eindeutig zuzuordnen wird geklammert - einmal um es selbst besser lesen zu können und auch um es für den Compiler eindeutig zu machen
    snafu
    :() { :|: &};:
    sometimes i dream in hex
    Obey gravity! Because its a law!
  • Original von pbmajorpb
    etwas mit einem Pointer habe ich mir schon gedacht, aber ich verstehe nicht warum es dann

    (NSString*)name heißt und nicht
    (NSString)*name


    Du beziehst Dich hier auf die Syntax von Objective-C, und da steht bei "Method Declarations":

    "Argument and return types are declared using the C syntax for type casting"

    Und das ist:

    <cast-expression> ::= <unary-expression> | ( <type-name> ) <cast-expression>


    Also insb ( <type-name> ) und nicht ( <parital-type-name> ) <rest-of-type-name>
    Alex
    The only thing that really worried me was the ether.
  • Original von pbmajorpb
    aber es heißt doch auch

    int *name

    und nicht int* name

    oder

    Eigentlich sind beide Schreibweisen korrekt, wobei ich persönlich int *name bevorzuge, aber dies ist halt Geschmackssache.

    Es wird hier sicherlich auch einige im Forum geben, denen int* name besser gefällt.
  • Original von MCDan
    Eigentlich sind beide Schreibweisen korrekt, wobei ich persönlich int *name bevorzuge, aber dies ist halt Geschmackssache.

    Es wird hier sicherlich auch einige im Forum geben, denen int* name besser gefällt.


    Flumsy fools! Nur int * name macht seelig!

    Alex
    The only thing that really worried me was the ether.
  • Original von pbmajorpb
    aber es heißt doch auch

    int *name

    und nicht int* name

    oder


    öhm das liegt daran weil der compiler unnütze leerzeichen etc sowieso überliest...

    du könntest auch

    Quellcode

    1. int * name;

    schreiben

    letztlich bleibt der Fakt bestehen das der '*' Operator zur Typspezifikation gehört - das legt die Syntax und Gramatik der Sprache C fest.

    und bei Methodendefinitionen in Objective C hat das ja schon Alex geschrieben das es eine Syntaktische Regel ist.
    snafu
    :() { :|: &};:
    sometimes i dream in hex
    Obey gravity! Because its a law!
  • Original von below
    Original von MCDan
    Eigentlich sind beide Schreibweisen korrekt, wobei ich persönlich int *name bevorzuge, aber dies ist halt Geschmackssache.

    Es wird hier sicherlich auch einige im Forum geben, denen int* name besser gefällt.


    Flumsy fools! Nur int * name macht seelig!

    Alex

    Hätte ich mal lieber nichts bezüglich Geschmack und Vorlieben gesagt bzw. geschrieben. :D
  • Original von chartus
    letztlich bleibt der Fakt bestehen das der '*' Operator zur Typspezifikation gehört - das legt die Syntax und Gramatik der Sprache C fest.

    Wirklich?
    Was ist denn mit

    Quellcode

    1. int* a,b;

    Was für einen Typ haben a und b?
  • Original von bootie
    Beide sind Pointer auf eine Integer-Variable.


    Nee. Ich bin nicht sicher ob das definiert (bin jetzt zu faul das im K&R zu suchen) ist, aber gcc und die meisten Compiler machen daraus int * a und int b

    Alex

    EDIT: Wer' nicht glaubt:

    C-Quellcode

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. int main (int argc, char ** argv)
    4. {
    5. int * a, b;
    6. b = 5;
    7. a = &b;
    8. printf ("a: %d b: %d\n", *a, b);
    9. return EXIT_SUCCESS;
    10. }
    Alles anzeigen
    The only thing that really worried me was the ether.
  • Original von tjp
    Was ist denn mit

    Quellcode

    1. int* a,b;

    Was für einen Typ haben a und b?


    Solchen Schrott schreiben aber auch - Zitat: - "Brusthaarträger" nicht! jk :)

    nein aber ernsthaft ich persönlich mag derartige variablen definitionen per kommataliste mal so rein garnicht - schon allein weil sie das sinnvolle init verhindern...

    ansonsten wie - Alex schon schrieb - ist imho der spezielle Fall garnicht definiert...
    snafu
    :() { :|: &};:
    sometimes i dream in hex
    Obey gravity! Because its a law!