Непонятный вывод программы на C - PullRequest
0 голосов
/ 24 февраля 2019

Почему компилятор показывает значение x как 0, если я определяю int x; внутри цикла for.Но при удалении int x из for цикл дает значение x как 10.

#include<stdio.h>
int main() {
    int x = 0, i;
    for(i = 1; i <= 10; i++) {
        int x;
        x = 10;
    }
    printf("%d", x);
}

Ответы [ 3 ]

0 голосов
/ 24 февраля 2019

Поскольку область действия int x внутри цикла for ограничена только для цикла.

для (i = 1; i <= 10; i ++) {int x;х = 10;/ <em>ограничено только этим циклом, не может использоваться вне цикла for /}

И int x вне цикла for, но внутри функции main () будет доступно всемфункция внутри main ()

Если вы хотите получить значение i, вы можете попробовать это:

x=i;

вместо

int x; x=10;

0 голосов
/ 24 февраля 2019

Как объяснялось ранее, если вы определите переменную внутри цикла for int x; x = 10;, она создаст новую переменную, доступ к которой возможен только внутри цикла for.

То есть, когда вы создаете переменную x в main, затем создайте переменную x в цикле for, вы в настоящее время отсылаете печать printf("%d", x); к первому x, объявленному в main, и именно поэтому она печатает 0. Этопотому что вы инициировали его на 0 в строке int x = 0, i;, и он никогда не менялся.На самом деле вы никогда не печатали x, который вы инициировали в цикле for.

Но когда вы удаляете int x; из цикла for, остается только один инициализированный x, и вы изменилизначение от x до 10 внутри цикла.Когда вы печатаете x, это дает вам 10, то есть значение, которое было присвоено ему внутри цикла for.

Надеюсь, это не сбивает с толку.

0 голосов
/ 24 февраля 2019

Если у вас есть int x внутри цикла for, вы создаете новую переменную x.Это означает, что в вашей программе фактически есть две переменные x, одна из которых доступна из вашей функции main(), а другая - только внутри цикла for.Если вы обращаетесь к x из цикла for, компилятор выберет ближайший.

Если бы в вашем цикле for не было int x, был бы только один xи ваша программа выдаст 10.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...