вопрос об инициализации по умолчанию в c - PullRequest
0 голосов
/ 02 августа 2020

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

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

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

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

1 Ответ

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