您的位置:首页 > 编程语言 > C语言/C++

【malloc ,free 用法以及指针】 C语言创建数组的三种方式

2019-03-28 16:24 453 查看

创建数组的三种方式

①声明一个数组,声明时用常量表达式指定数组维数,然后使用数组名访问数组元素。

 int  array[5];

②声明一个变长数组,声明时用变量表达式指定数组维数,然后使用数组名访问数组元素。

int n = 5;

int  array
;    // 注意:C99标准下才可以喔。 

③声明一个指针,调用malloc(),然后使用该指针访问数组元素。(需要引入头文件  <malloc.h>)

int  *  array ;

array = (int * ) malloc(5 * sizeof(int));    // 5 个连续的地址

或者

int  n = 5;

int  *  array ;

array = (int * ) malloc(n * sizeof(int));         // // n 个连续的地址。 注意:C99标准下才可以喔。 

 

malloc

malloc( ) 可以在程序运行时分配更多的内存。

参数:所需内存字节数。根据申请的块数量和指针的类型进行计算。

malloc( 5 * sizeof(int));    // 申请 5 个 int 型的数据的地址

malloc( ) 将找到可用内存中一个大小适合的块。

返回:那块内存第一个字节的地址。因为默认返回  void * 型,所以要根据指针的类型进行强制转换。        (如果找不到合适的空间,则返回空指针)

int  *  array  = (int * ) malloc(5 * sizeof(int));     //强制转换成 int * 型的地址

因此,我们可以把这个地址赋给一个指针变量,并使用这个指针来访问那一块内存。


free

free( ) 释放 malloc( ) 分配的内存

free(array);     // 释放

 

[code]#include<stdio.h>
#include<malloc.h>
using namespace std;

int main(){

int * array;     //声明指针
array = (int*)malloc(5 * sizeof(int));    //申请内存

for(int i= 0;i<5;i++){
array[i]=i;      //赋值
}

free(array);    //释放内存
return 0;
}

 

关于指针

在上面,我们用malloc来给一个指针开辟了指定大小的内存空间 (初始化),使得这个指针可以用来赋值。

如果不用malloc而直接对指针进行取值会怎么样呢?

int  *  array;    //未初始化的指针

*array  =  5 ;  

运行结果:程序直接崩掉。

当创建一个指针时,系统只分配了用来存储指针本身的内存空间,并没有分配用来存储数据的内存空间,所以在这种情况下对指针进行赋值将会导致程序的崩溃。

 

 

参考书籍:

《C Primer Plus (第五版)》Stephen  Prata

《C++面向对象程序设计 (第二版)》谭浩强

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐