2016-11-21 3 views
-1

Ich habe einige Dillema. Ich möchte in diesem Beispiel Strings in Funktionen bearbeiten. Mein Problem ist, dass die Verwendung von ***** ptr beim Untergehen komisch ist. Gibt es einen Weg, diesen "richtigen" Weg zu gehen?Weg, Zeiger (Strings) tief zu Funktionen

Pseudo-Code:

// all funX return array length 
int fun1(int **ptr){ 
    //some READ/WRITE on pointers, like mallocs, giving value etc. 
    int len = 0; 
    len = fun2(&ptr); 
    return len; 
} 

int fun2(int ***ptr){ 
// some more READ/WRITE on pointers, like mallocs, giving value etc. 
// what about going even deeper? 
} 

int main(){ 
    int *someString = NULL; 
    int len = 0; 
    len = fun1(&someString); 
    // some string operations 
    free(someString); 
return 1; 
} 

Mit freundlichen Grüßen, voodoo16.

+6

Sie benötigen nur eine Schicht von Dereferenzierung, egal wie oft Sie rund um die Adresse des ursprünglichen Zeiger vorbei sind. –

+3

Es gibt keine Zeichenfolgen in Ihrem Code! –

+0

Bitte lesen Sie mehr darüber, was ein Zeiger ist. Es ist nur eine Adresse. Wenn jemand deine Adresse einem anderen Menschen gibt, gibt er nicht die Adresse deiner Adresse (?), Sondern dieselbe Adresse, die du ihm gegeben hast. – Boiethios

Antwort

2

Es ist nicht notwendig, jedes Mal eine neue Indirektionsstufe hinzuzufügen, Sie geben einfach den Zeiger an die nächste Funktion weiter.

Sie wollen dies:

int fun2(int **ptr) { 
    // some more READ/WRITE on pointers, like mallocs, giving value etc. 
    // what about going even deeper? 

    *ptr = (int*)malloc(190); // 190 is just some arbitrary length for test purposes 
    return 190; 
} 


// all funX return array length 
int fun1(int **ptr) { 
    //some READ/WRITE on pointers, like mallocs, giving value etc. 
    int len = 0;    // BTW you dont need to initialize to 0 
    len = fun2(ptr); 
    return len; 
} 


int main() { 
    int *someString = NULL; 
    int len = 0;    // BTW you dont need to initialize to 0 
    len = fun1(&someString); 
    // some string operations 
    free(someString); 
    return 1; 
}