2013-11-24 3 views
1

Это очень быстрый вопрос. Почему я позволил сделать это:назначение массива указателей символов

char* sentence[2] ={"blahblah","trololo"}; 
int main() { 
    printf("%s",sentence[0]); 
    printf("%s",sentence[1]); 
    return 0; 
} 

, но не это ?:

char* sentence[2]; 
sentence[0] = "blahblah"; 
sentence[1] = "trololo"; 
int main() { 
    printf("%s",sentence[0]); 
    printf("%s",sentence[1]); 
    return 0; 
} 
+0

Рассмотрите, было ли у вас несколько исходных файлов, каждый из которых содержит код * вне * функций. Когда вы скомпилируете его вместе, когда (и в каком порядке) вы ожидаете, что весь этот код будет выполнен? – dreamlax

ответ

3

Вам не разрешается выполнять вторую часть, потому что назначение вне функции. При перемещении задания в main() (или другую функцию), он будет действовать

char* sentence[2]; 
int main() { 
    sentence[0] = "blahblah"; 
    sentence[1] = "trololo"; 
    printf("%s",sentence[0]); 
    printf("%s",sentence[1]); 
    return 0; 
} 
0

Почему я позволил сделать это:

char* sentence[2] ={"blahblah","trololo"}; 

Initialization допускается для глобальных переменных.

, но не это ?:

Заявления

sentence[0] = "blahblah"; 
sentence[1] = "trololo"; 

не имеет смысла вне функции (main()). Переместите их внутри функции, и она будет работать.

+0

Downvoters должны объяснить! – haccks

+0

Я не против downvoting (каждый раз). Я приветствую downvotes на мои ответы, если это заслуживает, но я против downvoting без каких-либо комментариев. Это действительно плохая практика. – haccks

-3

К сожалению я не читал правильным образом вопрос и я не видел функцию Main()

код работает каждый раз внутри функций. функции должны быть вызваны! main вызывается системой. поэтому этот код недостижим.

Вы можете вывести из функций только глобальную переменную (пример costant) или struct.

+0

Почему бы не работать? – dreamlax

Смежные вопросы