2016-11-21 66 views
-1

我有一些dillema。我想在這個例子中編輯函數中的字符串。我的問題是,下降時使用***** 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

每次只需將指針傳遞給下一個函數,不需要每次都添加一個新的間接級別。

你想這樣的:

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