传统数组的长度必须事先制定好,且只能是常整数,不能是变量,长度一旦定义便不能再改变;其占用的内存我们无法手动释放,在一个函数运行间该函数众的数组所分配到的空间知道函数运行完之后才会被释放;其不能够跨函数运行.
所以就出现了动态数组.动态数组很好的解决了传统数组的这几个缺陷.
举个例子:
int *p=(int *)malloc(int size);
上面这个语句分配了两片内存,一片内存是动态分配的总共size个字节,另一片是静态的.
malloc函数只有一个int类型的形参,表示的是分配的字节数,malloc函数的作用就是请求size个字节的内存空间,若成功便返回空间的地址,若失败就会返回null.malloc函数能且只能返回一个第一个字节的地址,故我们需要把这个无任何实际意义的第一个字节的地址转化为一个有实际意义的地址,比如:
int *p=(int *)malloc(100);
表示将非配好的100个字节的第一个字节地址转化为int *类型的地址,这样p就指向了第一个的四个字节,p+1就指向了第二个四个字节...以此类推.
动态数组释放内存
freep(p)表示吧p所指向的内存给释放掉,而p自身的内存是静态的我们不能手动释放,p本身的内存只能在p变量锁在的函数运行结束是系统自行释放.
静动态内存的比较:
静态内存有系统自动分配,且由系统释放;
静态内存是栈分配的
动态内存是由开发者手动分配,手动释放的;
动态内存是堆分配的
咨询热线
010-85377344
135-21581588
微信客服
QQ客服
3026106565 点击咨询