07

17

弄清C语言中的变量未赋值时的初始值问题

/*
程序目的:弄清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();
}


文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: Code c
相关日志:
评论: 1 | 引用: 0 | 查看次数: -
回复回复独木舟[2009-07-17 10:55 AM | del]
具有"静态"生存期的未初始化变量(即, 在函数外声明的变量和有静态存储类型的变量) 可以确保初始值为零, 就像程序员键入了"=0"一样。因此, 这些变量如果是指针会被初始化为正确的空指针, 如果是浮点数会被初始化为0.0(或正确的类型)。

具有"自动"生存期的变量(即, 没有静态存储类型的局部变量) 如果没有显示地初始化, 则包含的是垃圾内容。对垃圾内容不能作任何有用的假设。

这些规则也适用于数组和结构(称为"聚合体"); 对于初始化来说, 数组和结构都被认为是"变量"。

用malloc()和realloc()动态分配的内存也可能包含垃圾数据, 因此必须由调用者正确地初始化。用calloc()获得的内存为全零, 但这对指针和浮点值不一定有用
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.