Может кто-нибудь объяснить мне, что не так со следующим и, что более важно, почему?
int main( int argc, char *argv[] )
{
char array[] = "array";
char **test;
test = &array;
*test[0] = 'Z';
printf( "%s\n", array );
return 0;
}
РЕДАКТИРОВАТЬ
Мой пример выше основан на функциикак это, что рухнуло:
void apple( char **pp )
{
*pp = malloc( 123 );
*pp[0] = 'a'; // technically this is correct but in bad form
*pp[1] = 'b'; // incorrect but no crash
*pp[2] = '\0'; // incorrect and crash
}
Как указал мне Вон Като, хотя *pp[0] = 'a';
не дает сбой, это в плохой форме.Правильная форма - круглые скобки
void apple( char **pp )
{
*pp = malloc( 123 );
(*pp)[0] = 'a'; // correct
(*pp)[1] = 'b'; // correct
(*pp)[2] = '\0'; // correct
}
Также, как указал другой автор, М.К. часто задаваемые вопросы охватывают разницу между массивами и указателями: http://www.lysator.liu.se/c/c-faq/c-2.html