c语言全局变量数组初始化,全局数组和局部数组的初始化
请问,全局变量的数组如何初始化
在C语言中,全局变量和函数声明及定义并列,也就是说,声明在最外层作用域的变量即为全局变量
C语言中,数组初始化的问题
晕...这么多错误答案..
我来说下把,对于int类型,在外部定义(意思是在所有函数外定义)的数组或者变量等等,如果不给出显示的初始化,则编译器会自动将其初始化为0
如果不是在外部定义的,是局部性质的,则编译器不会对其进行初始化,他里面的值就是随机的,是乱码...至于这些你可以自己编个程序试一下啊
如果要权威答案,觉得编译器不可靠,那么你可以找本书来找找,书上有这段话的说明的,不过也许你的书上没有,那你就另外要找书了,因为有些书真的不怎么好.很垃圾,讲的不全面,下面分别给你两个程序,你自己运行下就知道了
程序1.
//定义为局部性质的数组
#include stdio.h
void main()
{
int a[5]; //定义局部性质的数组
int i;
for(i=0;i5;i++)
{
printf("%2d",a[i]);
}
printf("\n");
}
程序2.
//定义为全局性质的数组
#include stdio.h
int a[5]; //定义为全局性质的数组
void main()
{
int i;
for(i=0;i5;i++)
{
printf("%2d",a[i]);
}
printf("\n");
}
上面的两个程序都没给出显示的初始化,来判断编译器是否对它进行初始化,对比下...
运行后你会发现,定义为全局性质的数组的都会被编译器自动初始化为0
而非全局的,即局部性质的都不会被自动初始化
显示的是乱码
c语言字符数组初始化
如果是定义的全局,变量字符数组可以不用初始化因为全局变量会自动初始化为0值。如果是局部变量可以在定义的时候就给他初始化,也可以在定义完成以后,再用一个循环对他的所有元素进行初始化。
C语言 如何初始化指针数组 比如char *dd[5]
char 指针,也就是char *类型。 其初始化本质上与其它变量初始化没有什么区别,就是赋予其一个初始化的值。
对于指针来说,在C语言中,就是一个地址。区分初始化情况,有四种表象:
1 初始化为空。即
char * str = NULL;
的形式,NULL在C语言中是特定的空指针,其值为0.在C语言中,以NULL作为指针的一个未生效状态,其本身是一个非法的地址值。
2 初始化为常量字符串地址。
char * str = "test";
常量字符串在运行时会被放在常量空间中,于是这样初始化后,地址是常量空间中的一个地址,对于该地址只能读取,不可写入。即str的值可以改,但是str指向的值是不可修改的。
3 初始化为变量地址。
这里的变量地址,包括全局变量,局部变量的地址,以及通过动态分配申请到的内存地址。
这种情况下,对指针指向的空间是可以修改的。
4 不做初始化。
这种情况在C语言中是允许的。如果为全局变量或静态局部变量,系统默认初始化为0值,即NULL。而对于局部变量,将是一个随机值。所以如果是局部变量不做初始化,在取其指向空间值前,必须为其指定一个合法的值,否则访问会出错。
C语言中初始化数组和给数组元素赋值有什么区别?
所谓赋初值一般而言就是初始化啊
从根本上说,其实初始化也并不是编译阶段完成,对于全局变量(数组)而言,一种是exe文件中设定该程序的数据区中的为这个数组存放空间中的值已经是初值了,当然这个值倒是编译程序生成目标程序时设定的,程序运行加载时,给定空间中的内容直接拷贝到空间了,这个不占运行时间(C++中则是程序加载到main函数执行之前完成的,这个也不占运行时间)
对于自动局部变量而言,原则上说,每次运行到该模块就会重新初始化一次,肯定是要占用运行时间的,静态局部变量则第一次运行时才初始化一次,自然也会占用运行时间
至于你用赋值语句设定所谓的初值,一定会占用运行时间
c语言变量初始化的方式
变量的初始化就是在定义变量的时候,直接对变量进行赋值操作。
初始化的方式一般有如下两种:
1、直接对变量进行赋予常量数值进行初始化;
2、通过同类型变量进行初始化。
举例说明如下:
//?以下属于第1种初始化方式
int?a1=5;???????????//?整型变量的初始化
int?b1[]={1,2,3,4};?//?整型数组的初始化
char?str1[]="abcd";?//?字符数组的初始化
//?以下属于第2种初始化方式
int?a2?=?a1;????????//?整型变量的初始化
int?b2[4]?=?b1;?????//?整型数组的初始化
char?str2[4]?=?str1;//?字符数组的初始化
char?*p?=?str1;?????//?字符指针的初始化