指针学习十三——指针动态分配内存

2024-04-21 02:48

本文主要是介绍指针学习十三——指针动态分配内存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

动态内存分布函数

定义在stdlib.h里

  • 1.动态存储分配函数malloc( )

void *malloc(unsigned size)
再内存的动态存储中分配一连续空间,长度为size。申请成功,返回指向所分配内存空间的
的起始地址的指针;否则返回NULL;
//动态分配n个整数类型大小的的空间,调用malloc时,利用sizeof计算存储块大小
    if((p= (int *)malloc(n*sizeof(int)))==NULL){
    printf("Not able to allocate memory, \n");
    exit(1);
    }

  • 2.计数动态存储分配函数calloc( )

void *calloc(unsigned n,unsigned size)
在内存的动态存储区中分配n个连续空间,每一存储空间的而长度为size,并且分配后还把存储块
里全部初始化为0。申请成功,返回指向所分配内存空间的的起始地址的指针;否则返回NULL;

  • 3.动态存储释放函数free()

viod free(void *ptr)
盛放动态存储分配函数申请到的整块内存空间,ptr为指向要释放空间的首地址。
释放后不允许再通过该指针去访问已经释放的块。

  • 4.分配调整函数realloc()

void *realloc(void *ptr,unsigned size)
更改以前的存储分配。ptr必须是以前通过动态存储分配得到的指针。参数size为现在
需要的空间大小。分配失败,返回NULL;分配成功,返回一片能存放大小为siza的区块。

 

//动态分派内存指针求和
#include<stdio.h>
#include<stdlib.h>
int main()
{int n,sum,i,*p;printf("enter n: ");scanf("%d",&n);//为数组p动态分配n个整数类型大小的空间//动态内存申请的是一个没有名字、只有首地址的连续存储空间 if((p=(int *)calloc(n,sizeof(int)))==NULL)//申请存放n个int型数据的内存单元 {printf("not able to allocate memory.\n");exit(1);}printf("enter %d intergers:",n);for(i=0;i<n;i++)scanf("%d",p+i);sum=0;for(i=0;i<n;i++)sum=sum+*(p+i);printf("The sum is %d \n",sum);free(p); //动态存储释放函数 return 0;
}//enter n: 5
//enter 5 intergers:1 2 3 4 5
//The sum is 15//动态分配内存指针冒泡排序,有点问题,后续改正
#include<stdio.h>
#include<stdlib.h>
int main()
{int n,i,j,m,k,*p;printf("enter n: ");scanf("%d",&n);p= (int *)calloc(n,sizeof(int));if(p==NULL){printf("Not able to allocate memory, \n");exit(1);}printf("enter %d intergers:",n);for(i=0;i<n;i++)scanf("%d",p+i);for(j=1;j<n;j++){for(k=0;k<n-j;k++){if(*(p+j)>*(p+j+1)){m=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=m;}	}}for(i=0;i<n;i++)printf("%d ",*(p+i));	printf("\n");free(p); return 0;
} 	//enter n: 5
//enter 5 intergers:5 4 3 2 1
//5 3 2 1 0

 

这篇关于指针学习十三——指针动态分配内存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/921985

相关文章

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio