【malloc ,free 用法以及指针】 C语言创建数组的三种方式
创建数组的三种方式
①声明一个数组,声明时用常量表达式指定数组维数,然后使用数组名访问数组元素。
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++面向对象程序设计 (第二版)》谭浩强
- 面试题----new/delete、malloc/free、new[]/delete[]的用法与区别以及new的三种使用方法
- C语言学习8:malloc返回的void*类型指针不可以做更改,free双重释放,二维数组的初始化和打印,a和a[0]和a[0][0]的区别,数组指针(*p)[3],指针数组*a[10],动态内存分配版约瑟夫环,动态分配版去空格和逗号处理,二级指针与二维数组互用
- C语言 calloc, malloc, realloc ,alloca以及 free的用法
- 【C语言】malloc,calloc,realloc以及free的用法(动态内存)
- 详解Swift中对C语言接口缓存的使用以及数组与字符串转为指针类型的方法
- C语言中结构体的三种初始化方式以及结构体作为传参传递
- C语言中malloc和free的用法
- 【C语言】malloc()和free()函数的讲解以及相关内存泄漏问题
- C语言中多维数组的内存分配和释放(malloc与free)(转)
- c++中参数传递的三种方式,以及用法。传值,传址,传引用
- js中对象的声明方式以及数组的一些用法示例
- 字符串的存储方式,以及sizeof()(字符数组,字符指针,Sizeof总结)
- js中对象的声明方式以及数组的一些用法示例
- php学习之数组(2)直接键创建数组以及list each的用法
- 【C/C++学院】0820-Nullptr/const对象/类指针引用以及mallocfree与newde/类重载运算符/QT加法重载/类的重载赋值运算/自增在前在后差别/赋值重载深浅拷贝/重载下标
- c语言传递数组给函数的三种方式(注意均为引用传递)
- java 创建数组的三种方式及区别
- 【C语言】malloc()和free()函数的讲解以及相关内存泄漏问题
- 别人不会给你说的---C语言中数组名和指针的区别 及 sizeof用法
- C primer plus:在结构中使用指针,使用malloc分配指针空间以及free