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