2014-01-19 1 views
2

Как правило, что мне нужно делать? Я всегда должен инициализировать ptr?При инициализации указателя?

char *ptr; 

ptr = malloc (10); 

ИЛИ

char *ptr = NULL ; 

ptr = malloc (10); 

А в функции?

void func(char **ptr) 
{ 
    *ptr = malloc(10); 
} 

int main() 
{ 
    char *ptr; /* OR char *ptr = NULL; ? */ 

    func(&ptr); 

    return 0; 
} 
+2

Вы также можете использовать 'char * ptr = malloc (10);' - кажется намного лучше, чем любая другая альтернатива. – anatolyg

+0

Это хорошая идея ** всегда ** инициализировать переменные! – alk

ответ

2

Инициализировать перед использованием.

Примечание. Присвоение также является инициализацией.

Так,

char *ptr; 

ptr = malloc (10); 

ОК.

Но в случае

void func(char **ptr) 
{ 
    *ptr = malloc(10); 
} 

int main() 
{ 
    char *ptr; /* OR char *ptr = NULL; ? */ 

    func(&ptr); 

    return 0; 
} 

Вы должны инициализировать, как вы можете не знать, что функция будет делать с указателем.

+2

Тогда в «функциональной версии» я должен объявить указатель как 'char * ptr = NULL;'? – synth

+0

В этой конкретной версии это не нужно, но если вы говорите, вы должны инициализировать с помощью NULL, и ваша функция должна проверить переданные ему указатели, для случая, если она должна разыменоваться, она должна вернуть ошибку, если NULL передан. Это зависит от функции. – Dipto