首页 > 其他分享 >C语言 堆区空间,malloc

C语言 堆区空间,malloc

时间:2023-09-23 10:01:55浏览次数:35  
标签:malloc int 堆区 申请 C语言 使用 空间 1M

@TOC

前言

一、堆区空间的理解:

前面测试,普通的数组变量默认最大不能申请1M的空间,甚至远少于1M的空间,毕竟程序中的其他变量也需要使用空间。总共就1M,要省着用。 想要使用更大的,没有限制的空间,C语言给我们提供了方式: 如下:

  1. malloc // 申请空间,理论上物理内存有多大,就能申请多大,当然并不能,电脑系统运行其他软件按也需要空间。
  2. 兄弟函数:callocrealloc 均可以使用。
  3. free // 释放空间,申请的空间必须我们自己释放。

二、malloc:

  1. 使用:头文件:malloc.h (一定要加上,老版本可以不加,新版本一定要加上) malloc 的函数原型: void * malloc ( size_t_Size); malloc 作用:申请一段空间,并返回该空间的首地址
  2. void * : malloc 申请的空间首地址返回 void* ,我们可以将其转化为任意类型去使用。
  3. 参数: 要申请的字节数。 int * p = (int * ) malloc (sizeof ( int ) * 10); // 也可以直接写40 做10个int 类型的数组使用: p[0] , p[1] , p[2] ,...p[8] , p[9]

例如:

  1. 这两者都是申请40个空间。
  2. 做 12 个元素的 3 行 4 列的 int 类型使用: int ( * p) [4] = (int ( * )[4]) malloc ( sizeof ( int ) * 3 * 4); p[0][0]...p[2][3] 共12个元素。 用法类比之前学的:(两者都是一样的,申请48空间) int a[3][4]; int (*p)[4]=a;

总结

下一节 free 的使用。

标签:malloc,int,堆区,申请,C语言,使用,空间,1M
From: https://blog.51cto.com/u_16159289/7575946

相关文章

  • 理解C语言中的void类型的指针
    1.void类型指针简介void类型的指针又被称为泛型指针,通用型指针void类型的指针:指针指向的内存地址中的数据的类型未知其他所有类型的指针都可以转换为void类型的指针,而且不需要强制类型转换(编译器会隐式/自动类型转换)void类型的指针也可以转换为任意类型的指针,需要强制类型转......
  • C语言中的函数指针以及模拟面向对象
    函数指针的概念顾名思义,函数指针就是指向函数的指针,该指针的值是函数的入口。下面的代码时函数指针的一个基本实例。#include<stdio.h>intmax_(inta,intb);intmax1_(int(*func_p)(int,int),inta,intb);intmain(){inta=10,b=20;//定义一个函......
  • 七天学会C语言-第七天(结构体)
    1.定义结构体例1:把一个学生的信息(包括学号、姓名、性别、住址等4项信息)放在一个结构体变量中,然后输出这个学生的信息。#include<stdio.h>structStudent{intstudent_id;charname[30];chargender;charaddress[60];};intmain(){struc......
  • C语言学习-- ~ 按二进制取位 前置后置++ 关系操作符 逻辑操作符
    #include<stdio.h>//~按二进制取位intmain(){inta=10;intb=~a;/*~按二进制取位如101--~=010*/printf("%d\n%d\n",a,b);/*运行a=10b=-11在二进制里的最高位表示符号位,0为正1为负(3=000…………011)源码......
  • C语言学习-- ~ 按二进制取位 前置后置++ 关系操作符 逻辑操作符
    #include<stdio.h>//~按二进制取位intmain(){inta=10;intb=~a;/*~按二进制取位如101--~=010*/printf("%d\n%d\n",a,b);/*运行a=10b=-11在二进制里的最高位表示符号位,0为正1为负(3=000…………011)源码......
  • 【三子棋】——玩家VS电脑(C语言实现)
    (文章目录)前言三子棋是黑白棋的一种。三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。但是,有很多时候会出现和棋的情况。:pig:好了话不多说,现在我就带大家......
  • c语言双指针法--原地删除数组中的元素
     27.移除元素-力扣(LeetCode) intremoveElement(int*nums,intnumsSize,intval){intleft=0;intright=0;while(right<numsSize){if(nums[right]!=val){nums[left]=nums[right];left++;}......
  • c语言-关键字static
    局部变量:运行周期=函数的运行周期全局变量:运行周期=整个程序的运行周期(程序可以是多个.c文件组成)static可以修饰:1、局部变量(函数内定义的)2、全局变量(函数外定义的) 3、函数1.修饰局部变量->静态局部变量:开辟存储空间。在编译的过程中,会在数据区为该变量开辟空间,并对其进行......
  • c语言 qsort函数的使用
    #include<iostream>#include<stdio.h>voidprinfArray(int*nums,intsize){for(inti=0;i<size;i++){printf("%d",nums[i]);}printf("\n");}intcompare(voidconst*a,voidconst*......
  • 七天学会C语言-第六天(指针)
    1.指针变量与普通变量指针变量与普通变量是C语言中的两种不同类型的变量,它们有一些重要的区别和联系。普通变量是一种存储数据的容器,可以直接存储和访问数据的值。:intnum=10;//定义一个整数型普通变量num,赋值为10在例子中,变量num是一个普通整数变量,它直接存储了值10。指针变......