Почему видит только последнее значение?

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

Чтобы приступить к поиску причины этой проблемы, нужно рассмотреть несколько возможных сценариев:

1. Несколько присваиваний переменной: Если у вас есть несколько присваиваний одной переменной в разных частях кода, то видимым будет только результат последнего присваивания. Например:

int x = 5;
x = 10;
x = 15;
printf("%d", x); // Выведет 15

Если это ваш случай, то вам нужно установить точку останова или вставить отладочные инструкции (printf или отладчик) после каждого присваивания, чтобы понять, какое значение имеет переменная в каждом из них.

2. Изменение значения указателя: Если вы используете указатели и изменяете их значения, то при каждом новом присваивании указателю оно переопределяется, тем самым затирая предыдущее значение указателя. Например:

int* ptr = NULL;
int x = 5;
ptr = &x;
x = 10;
printf("%d", *ptr); // Выведет 10

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

3. Указатель на локальную переменную: Если вы используете указатель на локальную переменную в функции и пытаетесь вернуть этот указатель из функции, то это может вызвать проблемы, так как локальные переменные уничтожаются после выхода из блока функции. В результате, значение указателя становится недействительным. Например:

int* getLocalPtr() {
    int x = 10;
    return &x; // Возвращается указатель на локальную переменную
}

int* ptr = getLocalPtr();
printf("%d", *ptr); // Непредсказуемый результат

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

4. Ошибка в цикле: Если у вас есть цикл, который изменяет значение переменной на каждой итерации, но вы хотите сохранить все значения, вам нужно иметь массив или другую структуру данных, чтобы хранить эти значения. Например:

int arr[5] = {0}; // Массив для хранения значений
int i;
for (i = 0; i < 5; i++) {
    arr[i] = i * i;
}
for (i = 0; i < 5; i++) {
    printf("%d ", arr[i]); // Выведет 0 1 4 9 16
}

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

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