测试代码
#include <stdio.h>
//全局整形变量
int int1;//外部链接
static int stint1;//内部链接
int array1[1];//数组
//全局指针变量
char* p1;
int main()
{
//局部整形变量
int int2;
static int stint2;
int array2[1];
//局部指针变量
char* p2;//局部指针变量不初始化打印不出来
printf("int1=%d,stint1=%d,array1=%d,p1=%s\n", int1, stint1,array1[0],p1);//全局变量
printf("int2=%d,stint2=%d,array2=%d,p2=%s\n", int2, stint2,array2[0],p2);//局部变量
return 0;
}
测试环境1.Visual Studio2022
- 全局未初始化变量设置默认值(int类型默认0,指针默认null)
- 局部变量定义不使用会警告,定义且使用将报错
测试环境2.GCC
- GCC环境下,全局未初始化变量设置默认值(int类型默认值0;字符指针默认null)
- 局部未初始化变量有时设置随机值或者默认值
测试环境3.DEV-C++
- Dev-C++环境下,全局未初始化变量均设置为默认值(int类型默认值0;字符指针默认null)
- 局部未初始化变量,整形设置默认值0;指针未初始化变量不打印不报错
总结:
1. 局部变量未初始化,初值为随机值:C规范对该初值并没有做规定,具体实现由编译器决定。
2.全局变量未初始化,默认设置为初值(0/NULL)。
3.局部未初始化变量,编译通过与否与具体编译环境相关。