2016-02-16 2 views
-3
#include <stdio.h> 

int main() 
{ 
    int a=9; 
    if(a<10){ 
     int a = 20; 
     ++a; 
     printf("%d\n",a); 
    } 
    printf("%d\n",a); 
} 

Зачем разрешено повторное использование разрешено в цикле и если условие здесь?
Почему мы не можем увеличивать или уменьшать переменную внутри цикла или оператор if, занесенный вне цикла или если оператор?Почему переопределение переменной допускается внутри цикла, и если условие, которое объявлено вне цикла или если условие уже есть?

ответ

0

Я думаю, что вы ожидаете изменения i.e присваивания значения a, а не переоформления. Итак, внутри цикла просто сделайте как a=20 вместо int a=20.

Повторная декларация невозможна для одной и той же переменной. После объявления какой-либо переменной выделяется память. Если вы обновите его, это создаст конфликты или ошибки.

+0

Я использую int для 'a' дважды, так что это переобучение. –

0

Переменная внутри вложенного блока может иметь то же имя, что и переменная внешнего блока. Это называется скрытием имени.

Переменная определяет во вложенном блоке «скрывает» переменную внешнего блока.

В конце вложенного блока переменная, локальная для этого блока, уничтожается. Таким образом, оператор printf выполняется с переменной, определенной в начале функции main.

3

Это не «переоформление», это объявление новой переменной с тем же именем. Весь доступ к a в операторе if будет ссылаться на новую локальную переменную a со значением 20, а не на ранее выделенную со значением 9.

Причина, по которой это разрешено, заключается в том, что она позволяет давать имена локальным переменные, не беспокоясь о том, какие имена уже приняты в другом месте.

Главным образом это проблема между локальной областью и глобальным охватом, но те же правила применяются рекурсивно к локальным областям внутри локальной области.

Если бы это было запрещено, было бы очень сложно поддерживать большие проекты, так как вы постоянно сталкивались с именованием столкновений.

Вообще, хотя в разных областях применения очень плохое использование одного и того же имени для разных переменных, вы должны избегать этого, когда это возможно.

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