вопрос об инициализации по умолчанию в c
Я готовлюсь к интервью, и этот вопрос меня немного сбивает с толку. Был бы признателен за ваш совет.
Что не инициализируется по умолчанию?
- Последняя переменная статического массива, в котором первые переменные явно инициализируются в инструкции.
- Члены динамического массива, назначенные с помощью
calloc
функция.- Глобальная переменная.
- Все данные, представленные здесь, инициализируются по умолчанию.
- Текущее положение курсора при открытом файле.
- Статическая переменная.
- Последний символ в статическом наборе символов.
Я думаю, что ответ №1, но не уверен в объяснении.
1 ответ
- В статическом массиве (или в любом массиве), когда он явно инициализирован, все значения неинициализированных переменных будут равны 0.
calloc
обнулить память, на которую он указывает.- По умолчанию значения глобальных переменных равны 0.
- Заполнитель (это просто означает, что инициализируются все остальные параметры).
- Если не открывается в
append
Режим (a
вfopen
) положение курсора будет 0. Вappend
в режиме это будет длина файла. - По умолчанию значения статических переменных равны 0.
- Статический набор символов (если я правильно понял) - это
char
массив, и, как и любой другой массив, при инициализации последнийchar
, если неинициализирован, будет 0. В случаеchar
массив, последнийchar
будет нулевым байтом, и его намерение - 0, чтобы отметить конец строки.
Как видите, все параметры инициализированы по умолчанию, поэтому ответ - 4.
Если вы не уверены, всегда проверяйте свои вопросы с помощью простого кода:
#include <stdio.h>
#include <stdlib.h>
void test1()
{
static int arr[5] = { 1,2,3,4 };
printf("Last variable is %d\n", arr[4]);
}
void test2()
{
int* arr = (int*)calloc(5, sizeof(int));
int b = 1;
for (int i = 0; b && i < 5; i++)
if (arr[i])
b = 0;
if (b) puts("Calloc zero all elements");
else puts("Calloc doesn't zero all elements");
}
int test3_arg;
void test3()
{
printf("Global variable default value is %d\n", test3_arg);
}
void test5()
{
FILE* file = fopen(__FILE__, "r");
printf("The current cursor location is %ld\n", ftell(file));
fclose(file);
}
void test6()
{
static int arg;
printf("Static variable default value is %d\n", arg);
}
void test7()
{
static char arg[] = "hello";
printf("The last character is %d\n", arg[5]); //last one will be the NULL byte (0)
}
int main()
{
test1();
test2();
test3();
test5();
test6();
test7();
return 0;
/*
* Output:
Last variable is 0
Calloc zero all elements
Global variable default value is 0
The current cursor location is 0
Static variable default value is 0
The last character is 0
*/
}