07
17
弄清C语言中的变量未赋值时的初始值问题
作者:独木舟 日期:2009-07-17
/*
程序目的:弄清C语言中的变量未赋值时的初始值问题
测试结果:在C语言中,全局变量和静态变量,如果没有赋初值,则默认初始值int,float,char,空指针
分别为0.0.0.'\0',0~~~~~~~除了全局变量和静态变量以外,其它变量如果没有赋初值,则默认初始值为
内存中的垃圾内容,对于垃圾内容不能有任何假设.
这些规则对于数组\结构体和联合体也同样适用
用malloc()和realloc()动态分配的内存也可能存在垃圾内容.因此在使用变量前最好都赋初值.
*/
#include<stdio.h>
#define N 10
int a,b[N];
char c,*m;
void main()
{
static int p,q[N],i;
char e,*n;
printf("%d,%d\n%d,%d\n%d\n",a,c,p,e,n);
for(i=0;i<N;i++)
{
printf("%d ",q[i]);
}
getchar();
}
程序目的:弄清C语言中的变量未赋值时的初始值问题
测试结果:在C语言中,全局变量和静态变量,如果没有赋初值,则默认初始值int,float,char,空指针
分别为0.0.0.'\0',0~~~~~~~除了全局变量和静态变量以外,其它变量如果没有赋初值,则默认初始值为
内存中的垃圾内容,对于垃圾内容不能有任何假设.
这些规则对于数组\结构体和联合体也同样适用
用malloc()和realloc()动态分配的内存也可能存在垃圾内容.因此在使用变量前最好都赋初值.
*/
#include<stdio.h>
#define N 10
int a,b[N];
char c,*m;
void main()
{
static int p,q[N],i;
char e,*n;
printf("%d,%d\n%d,%d\n%d\n",a,c,p,e,n);
for(i=0;i<N;i++)
{
printf("%d ",q[i]);
}
getchar();
}
评论: 1 | 引用: 0 | 查看次数: -
发表评论
具有"自动"生存期的变量(即, 没有静态存储类型的局部变量) 如果没有显示地初始化, 则包含的是垃圾内容。对垃圾内容不能作任何有用的假设。
这些规则也适用于数组和结构(称为"聚合体"); 对于初始化来说, 数组和结构都被认为是"变量"。
用malloc()和realloc()动态分配的内存也可能包含垃圾数据, 因此必须由调用者正确地初始化。用calloc()获得的内存为全零, 但这对指针和浮点值不一定有用