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

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

相关文章

一文详解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

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht

golang实现动态路由的项目实践

《golang实现动态路由的项目实践》本文主要介绍了golang实现动态路由项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习... 目录一、动态路由1.结构体(数据库的定义)2.预加载preload3.添加关联的方法一、动态路由1