Учебные заметки C - объявление, определение, инициализация

заявление

спецификатор + список выражений

int a;
char j, k l;

определение

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

int tern = 1; //定义

int main() {
    
    
	int a; //也是定义,因为建立了存储空间
	extern int tern; // 声明定义在别处的变量,仅仅是声明,没有建立空间
}

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

Ключевое слово extern может быть только объявлено, но не определено.

инициализация

Инициализация переменной: после того, как переменная объявлена ​​или определена, процесс присвоения начального значения является инициализацией переменной.

Разница между определением и инициализацией

int a; //只是定义也是声明,但是并没有给初始值,所以不是初始化。
int a = 4; //既是定义又是初始化。
extern int a; //仅仅是声明。

Конечно, определение и инициализацию также можно разделить.

int b; //声明/定义 变量
b = 2//初始化变量

инициализация статической переменной

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

автоматическая инициализация переменных

Автоматические переменные не инициализируются равным 0.
Программа не может определить место хранения автоматических переменных во время компоновки, поскольку локальные переменные могут занимать разные места при каждом вызове функции. Таким образом, автоматические переменные используют больше накладных расходов.

  1. Инициализация и объявление, а затем присвоение автоматических переменных имеют одинаковую эффективность и не отличаются друг от друга.
  2. Статические переменные инициализируются только один раз при каждом выполнении программы, а автоматические переменные инициализируются один раз при каждом выполнении функции.
  3. Поскольку автоматическая инициализация переменных выполняется во время выполнения, вы можете инициализировать ее с помощью переменных, а статические переменные нельзя инициализировать с помощью переменных.
    int a = 4;
    int b = a + 3;
    //static int c = a + 4; 编译报错
    
  4. Рекомендуется инициализировать автоматические переменные или убедиться, что они назначены перед использованием, иначе он будет иметь неожиданное мусорное значение.

おすすめ

転載: blog.csdn.net/chongbin007/article/details/129034719
おすすめ