это неоперация или что-то еще? - PullRequest
1 голос
/ 16 сентября 2011
#include<stdio.h>

int i;
int increment(int i)
{
    return ++i;
}

int main()
{
    for(i=0;i<10;increment(i))
    {
        printf("%d",i);
    }
    return 0;
}

Здесь вывод равен 000000. То есть происходит бесконечный скачок.

Я хочу знать, что это происходит из-за отсутствия операций, поскольку у нас нет переменной для хранения значения ++ i (возвращаемого функцией приращения) или это связано с чем-то другим? Пожалуйста, объясните.

Ответы [ 2 ]

12 голосов
/ 16 сентября 2011

Да, это неоперация.Вызов increment ничего не меняет, поскольку значение передается по значению.

Локальное определение i затеняет глобальное определение.Следовательно, используется только локальное определение i, а глобальное определение i не зависит от приращения, которое выполняется для локальной копии переменной.

2 голосов
/ 16 сентября 2011

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

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