关于c语言的数组存在两种赋初值的方法,一种是静态赋,一种是动态赋初值,我想知道静态赋初值的话是不是默认此数组是静态数组,数据也因此存贮在静态存储区?高手帮帮忙吧!谢谢了
你提这个问题涉及几个方面
1.静态存储区
2.静态数组(static数组),全局数组,动态数组,局部数组
3.给数组赋初值
下面分别解答
1.静态存储区/BSS段/栈
一个程序一般分为3段:text段,data段,bss段
text段:就是放程序代码的,编译时确定,只读,
data段:存放在编译阶段(而非运行时)就能确定的数据,可读可写
就是通常所说的静态存储区,赋了初值的全局变量和静态变量存放在这个区域,常量也存放在这个区域
bss段:定义而没有赋初值的全局变量和静态变量,放在这个区域
2.数组定义
函数外不加static定义的数组为全局数组
用static定义静态数组(函数内或函数外)
用malloc定义动态数组
函数内不加static关键字的数组,为局部数组
3.数组赋初值
对全局数组,定义并赋初值,则在data段,定义未赋初值,在bss段
静态数组也一样,无论静态数组是在函数内还是函数外,定义并赋初值,则在data段,定义未赋初值,在bss段
动态数组,全是从堆上分配的
局部数组,从函数的栈上分配的,显然存储在栈上,函数结束就释放
重点区分最具有迷惑性的以下两种定义
int func1()
{
char s[200]="hello world!";
}
int func2()
{
static char s[200]="hello world!";
}
func1中,"hello world!"为常量数组,存放在data段
数组s从func1的栈上分配,然后常量数组的值复制到数组s中
func2中,"hello world!"为初值,数组s编译时就确定在data段,
初值为"hello world!"
加载中,请稍候......