2016-11-21 164 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; 
}