& auf char-Array anwenden ....



  • Hi Leute,
    Ich hab mal wieder ne Frage:
    Ist es ok, zb bei memset den Adressoperator auf ein chararray anzuwenden?

    char ch[100]="Text";
    memset(&ch,0,sizeof(ch));
    

    Mitm dem VC++ 7 funktioniert das, ist das aber auch ok so? Und falls es ist: Wieso?? ch ist ja im grunde gleichbedeutend mit &ch[0] ...
    Bin grad verwirrt ...



  • Der Name von einem Array ohne [] ist schon eine Adresse. Man schreibt ja auch z.B.

    strcat(array1,array2); 
    //Parameter sind char* und const char*
    


  • danke, aber das hilft mir kein stück weiter, weil ich das auch schon weiss:

    Original erstellt von dEUs:
    ch ist ja im grunde gleichbedeutend mit &ch[0]



  • die tuecke liegt im detail. ein array ist eben nicht immer das gleiche wie die adresse seines ersten elements. nur wenn der ausdruck anders keinen sinn macht (grob gesagt, gibt genug faqs dazu).



  • öhm 😕
    Kannst du mir einfach sagen, obs bei obigem beispiel korrekt ist? brauch das net allgemein gültig, sondern nur für char-arrays



  • du kannst noch 20 & davorsetzen, es bleibt korrekt :-||

    [ Dieser Beitrag wurde am 07.06.2003 um 21:47 Uhr von Mr. N editiert. ]



  • das glaub ich net, da bekomm ich nämlich nen kompilerfehler 🙂



  • &arr == arr == &arr[0]

    wobei &arr sich aber _sehr_ blöd liest
    deswegen nimm arr oder &arr[0]



  • Danke 🙂
    Geht übrigens um folgendes:

    #define ZeroMemory(Obj) memset(&Obj,0,sizeof(Obj))
    .
    .
    .
    char chTmp[100];
    ZeroMemory(chTmp);
    


  • Original erstellt von Shade Of Mine:
    **&arr == arr == &arr[0]
    **

    Nur bei stack-arrays 😉
    nicht das jemand sowas macht
    int* arr = new int[10];
    memset(&arr, 0, sizeof(arr));



  • Original erstellt von Shade Of Mine:
    &arr == arr == &arr[0]

    Nur bei stack-arrays

    Ne. Bei allen Arrays. Du darfst nur nicht Elefanten mit Krokodilen vergleichen.

    Das:

    int arr[20];
    

    ist ein Array und kann in bestimmten Situationen als Zeiger-auf-erstes-Element interpretiert werden.

    Das hingegen:

    int* arr = new int[10];
    

    ist ein *Zeiger* auf int und es bleibt auch immer ein Zeiger auf int. Es wird niemals ein Array.

    Anders sieht's z.B. hier aus:

    // pArr ist ein Zeiger auf ein Array
    int (*pArr)[20] = new int[][20];
    // ...also ist *pArr ein Array
    // ...und damit gilt:
    // *pArr == &*pArr == &*pArr[0]
    

    nicht das jemand sowas macht
    int* arr = new int[10];
    memset(&arr, 0, sizeof(arr));

    Jo. Das wäre in der Tat großer quatsch.


Anmelden zum Antworten