вопрос об инициализации по умолчанию в c

Я готовлюсь к интервью, и этот вопрос меня немного сбивает с толку. Был бы признателен за ваш совет.

Что не инициализируется по умолчанию?

  1. Последняя переменная статического массива, в котором первые переменные явно инициализируются в инструкции.
  2. Члены динамического массива, назначенные с помощью calloc функция.
  3. Глобальная переменная.
  4. Все данные, представленные здесь, инициализируются по умолчанию.
  5. Текущее положение курсора при открытом файле.
  6. Статическая переменная.
  7. Последний символ в статическом наборе символов.

Я думаю, что ответ №1, но не уверен в объяснении.

1 ответ

  1. В статическом массиве (или в любом массиве), когда он явно инициализирован, все значения неинициализированных переменных будут равны 0.
  2. calloc обнулить память, на которую он указывает.
  3. По умолчанию значения глобальных переменных равны 0.
  4. Заполнитель (это просто означает, что инициализируются все остальные параметры).
  5. Если не открывается в append Режим (a в fopen) положение курсора будет 0. В append в режиме это будет длина файла.
  6. По умолчанию значения статических переменных равны 0.
  7. Статический набор символов (если я правильно понял) - это 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
     */
}
Другие вопросы по тегам