Member 13377971 Ответов: 3

Значение local int должно быть напечатано 0, но оно печатается 1. Почему?


Я новичок в Си. Я читал, что локальная переменная int инициализируется 0, но в этой программе b печатается 1.
#include<stdio.h>

int main(){
   int b;
   printf("%d ",b);
   int a[10]={1},i; 
   for(i=0;i<10;i++){
      printf("%d ",a[i]);
   }
   printf("%d",b);
}

Может ли кто-нибудь объяснить мне причину?
Кроме того, когда я удаляю массив a[] и for loop, выход равен 0. почему?
Заранее спасибо!

Что я уже пробовал:

Я попытался напечатать b после удаления массива a[] и для цикла, тогда b печатается 0, но включая массив a[] и для цикла он печатается 1.

3 Ответов

Рейтинг:
2

Graeme_Grant

int b;

Вы объявили переменную, но присваиваете ли вы ей значение?


Рейтинг:
1

Patrice T

Измените свой код на

#include<stdio.h>
int main(){
   int b;
   printf("First");
   printf("%d ",b);
   int a[10]={1},i; 
   for(i=0;i<10;i++){
      printf("%d ",a[i]);
   }
   printf("%d",b);
   printf("Last");
}

Так что вы знаете, что видите все, что напечатала ваша программа.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
0

Richard MacCutchan

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