В чем разница между инициализацией переменной во время объявления int a=2
и после объявления int a; a=2
?
Разница в том, что второй не является инициализацией . Это назначение . Когда дело доходит до вашего очень простого примера, на практике нет никакой разницы.
структуры и массивы
Большая разница в том, что некоторые приемы инициализации недоступны при обычных назначениях. Как например инициализация массива и структуры.
int x[5] = {1, 2, 3, 4, 5}; // Ok
x = {1, 2, 3, 4, 5}; // Not ok
struct myStruct {
int x;
char y;
};
struct myStruct a = {1, 'e'}; // Ok
a = {1, 'e'}; // Not ok
a = (struct myStruct) {1, 'e'}; // But this is ok
постоянные переменные
И если вы объявили переменную как const
, вы не сможете изменить ее позже, поэтому их нужно инициализировать.
const int x = 5; // Ok
x = 3; // Not ok, x is declared as const
статические переменные
Это также влияет на статические переменные особым образом.
void foo() {
static int x = 5; // The initialization will only be performed once
x = 8; // Will be performed everytime the fuction is called
Таким образом, эта функция вернет 1, если она была вызвана ранее, и 0 в противном случае:
int hasBeenCalled() {
static int ret = 0;
if(!ret) {
ret = 1;
return 0;
}
return 1;
}
Вы можете прочитать об инициализации в главе 6.7.9 в стандарте C. Задания находятся в главе 6.5.16