2016-11-21 19 views
-1

私はいくつかのディレマを持っています。この例では、関数内の文字列を編集したいと思います。私の問題は、***** ptrを使用すると奇妙な気分になるということです。この「もっと」適切なやり方はありますか?関数へのポインタ(文字列)の受け渡し方法

擬似コード:

// 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; 
} 

敬具、 voodoo16。

+6

を。 –

+3

コードに文字列がありません! –

+0

ポインタの詳細については、こちらをご覧ください。それは単なるアドレスです。誰かがあなたの住所を他の人に与えるとき、彼はあなたの住所(?)の住所をあなたに与えたのと同じ住所にしません。 – Boiethios

答えて

2

新しいレベルの間接参照を追加する必要はありません。ポインタを次の関数に渡すだけです。

あなたはこの希望:あなたが唯一の間接の1層、あなたの周りの元のポインタのアドレスを渡している回数に関係なく必要

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; 
} 
関連する問題