内存分配时间

1、变量在声明时即分配内存,此时将根据变量的内存分配内存大小,如int类型4字节,float类型4字节,double类型8字节。如下例中的a.

2、但对于数组,有以下几种情况(以int类型为例):

(1)声明数组时即指定数组大小N,则此时可按N*sizeof(int)的大小分配内存。如下例中的c。

(2)声明数组时虽然未指明大小,但声明的同时也对数组进行了初始化,则按初始化时的元素数量N*sizeof(int)来分配内存。如下例中的d。

3、声明数组的时候未指明大小,同时也未进行初始化。此类情况一般出现在函数的形式参数中

形参只是个声明不是定义,所以他只是一个指针,在堆栈里占用一个指针的长度(通常就是某种整型的长度)
未指定大小的数组,如果没有初始化,那就不是定义,只是声明;在这个声明可见的地方不可以获取数组的大小,只有在
定义(数组初始化)可见的地方,才可以获取数组大小。

而函数参数虽然可以声明成数组的形式,其实并不是声明一个数组只是声明了一个指针,虽然可以获取大小,但是并不是数组的大小,只是那个指针的大小;而且形参声明的[]里的常量并无任何用处,只能告诉使用这个函数的人,这个参数是这个样子的,不要用错了!

若char a[10],这个数组没有赋初值;该数组在编译时是不是只开辟内存,初始化由程序员完成?!

1,函数是在编译期间只是引入代码,所以它的局部变量是不会开辟空间的,只有在调用的的时候开辟
局部变量是在该函数被调用的时候才会得到所分配的内存空间。但是该内存空间的分配形式是在编译的时候就确定了的。
2是啊,a里面全是随机数据,你可以打印看看吗?当然你也可以char a[10]={0}就全是0值了
3通常的静态的,动态的要用malloc开辟,这个静态是指数组大小固定,不是你说的静态数据,也怪作者用词不当

根据该数组的作用域不同而有所区别,但内存的分配都不是在编译的时候分配的。

如果是局部变量,会在程序执行到这里的时候才去分配的虚拟内存。通常不会分配物理内存,一般是用到多少,才分配多少。

如果是全局变量,则会在加载程序的时候分配虚拟内存,同局部变量,通常也是按需分配物理内存。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值