我正在准备面试,发现这个问题有点令人困惑。非常感谢您的建议。
什么默认没有初始化?
- 静态数组的最后一个变量,其中第一个变量在语句中显式初始化。
- 使用
calloc
函数分配的动态数组成员。- 全局变量。
- 此处提供的所有数据均默认初始化。
- 打开文件时的当前光标位置。
- 一个静态变量。
- 静态字符集中的最后一个字符。
我认为答案是#1,但不确定解释。
我正在准备面试,发现这个问题有点令人困惑。非常感谢您的建议。
什么默认没有初始化?
- 静态数组的最后一个变量,其中第一个变量在语句中显式初始化。
- 使用
calloc
函数分配的动态数组成员。- 全局变量。
- 此处提供的所有数据均默认初始化。
- 打开文件时的当前光标位置。
- 一个静态变量。
- 静态字符集中的最后一个字符。
我认为答案是#1,但不确定解释。
calloc
将它指向的内存归零。append
模式 ( a
in fopen
) 中打开,则光标位置将为 0。在append
模式下,它将是文件的长度。char
数组,与任何其他数组一样,初始化时 last 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
*/
}