数据结构之malloc()函数动态内存分配复习

直接上代码分析 

#include <stdio.h>
#include <string.h>
#include <malloc.h>int mian() {int a[5] = { 1,5,8,46,12 };int len;printf("请输入你要分配数组的长度: len=");scanf("%d", &len);int * pArr = (int *)malloc(sizeof(int) * len);   //为什么这里要使用强制类型转化?//malloc函数返回的是第一个元素地址,//这个第一个元素地址是没有意义的,因为double  int  char类型都一样返回第一个元素地址,//程序无法知道这个第一个元素地址是什么类型的和占几个字节,//所以需要强制类型转换告诉程序malloc函数返回的第一个元素地址的什么类型的*pArr = 4;    //类似于 a[0] = 4;pArr[1] = 10;    //类似于  a[1] = 10;}

 int* pArr = (int*)malloc(sizeof(int)*len);         如果len占5个字节的话,那么 malloc(sizeof(int)*len)=20  个字节, 20表示的是这个malloc函数请求操作系统要为我们的程序分配20个字节的空间,就是提供20个字节的空间来为我们程序进行读写.

         malloc函数只能返回第一个字节的地址,这个是系统规定的,第一个字节的地址没有实际含义。因为不能根据第一个字节地址来确定这个变量占了几个字节。因为整形变量占四个字节,它也是以第一个字节地址来表示的,如果这个变量是double类型的话,它也是以第一个字节地址来表示的。无论这个变量占几个字节它都是以第一个字节来表示的,所以malloc返回的第一个字节地址是没有实际意义的地址(干地址)。所以我们需要在  malloc(sizeof(int)*len)  的前面加一个强制类型转换  (int*)malloc(sizeof(int)*len)  来告诉我们的编译器,我们返回的第一个字节地址到底是整型的地址,还是其他类型的地址。所以强制转换成 int * 的话,那么我们的  pArr+1  的话那么它将会指向后面的一个 int * 的位数,会指向后四位,如果强制类型是  double *  的话,  pArr + 1   将会指向后八位的地址。

         所以我们的  pArr  就等价与   a(数组,数组名表示首地址) , 因为a是指向了第一个元素,第一个元素就占了四个字节。   malloc(sizeof(int)*len)  这个分配了20个字节,malloc返回第一个整型的地址,pArr也指向前四个字节,pArr表示的是整型的地址。  那么  pArr + 1  就是指向了后四位了。

           那么  *pArr = 4;     //类似于   a[0] = 4;

                      pArr[1] = 10;   //类似于a[1] = 10;

                      然后就导致了   pArr  表示前四位(第一个字节)   

                                               pArr + 1  就指向了后四位(一字节)
 

void main(){int a[5] = {4,10,2,8,6};int len;printf("请输入你需要分配的数组的长度:len=");scanf("%d",&len);int * pArr = (int *)malloc(sizeof(int)*len);    //malloc 是系统函数//*pArr = 4;    //类似于 a[0] = 4;//pArr[1] = 10;    //类似于  a[1] = 10;//printf("%d %d\n", *pArr,pArr[1]);//我们可以把pArr当作一个普通数组来使用for(int i=0;i<len;++i)scanf("%d",&pArr[i]);for(i=0;i<len;++i)printf("%d\n"*(pArr+i));free(pArr);    //把pArr所代表的动态分配的20个字节内存释放return 0;

 free(pArr);    //把pArr所代表的动态分配的20个字节内存释放

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神策数据张涛:如何让用户标签价值落地?

本文根据神策数据副总裁张涛在《用户个性化运营—标签体系搭建新机遇》主题沙龙中演讲整理所得。 标签系统&#xff0c;在企业中已不是什么“高大上”的说辞。然而让用户标签价值真正落地企业不多&#xff0c;就像“青少年谈性”&#xff0c; 有一段话形容得再贴切不过&#xf…

标量函数,多语句表值函数,内嵌表值函数

标量函数返回一个标量(单值)结果,可返回Timestamp,text,Ntext,Image,Table,Cursor多语句表值函数&#xff0c;返回一条或多条Transact-sql语句建立的表,可在select 语句的FROM子句中被引用.内嵌表值函数&#xff0c;位于RETURN子句中的SELECT命令段从数据库中摔选出来的&#x…

ios初学笔记

bool值只取最低位的值&#xff0c;若最低位为&#xff10;&#xff0c;bool值等于NO&#xff1b;若最低位不为&#xff10;&#xff0c;bool值等于YES。比较bool值的时候&#xff0c;将变量与NO进行比较最保险。objc不支持多继承类的description方法类似java的toString方法&…

蒙特卡罗方法介绍( 二)

蒙特卡罗方法介绍( 二) 一、蒙特卡罗求解定积分 蒙特卡洛方法求解定积分有两种方法&#xff0c;一种是上一节中讲的投点法&#xff0c;另外一种是期望法&#xff08;也称平均值法&#xff09;。 1.1 投点法 给出如下曲线f(x)f(x)f(x),求f(x)f(x)f(x)在a,ba,ba,b上的积分&am…

大数据技术之kafka (第 3 章 Kafka 架构深入) 分区策略在分析

如果不懂分区策略请看我之前的文章&#xff1a;https://blog.csdn.net/ywl470812087/article/details/105328015 默认的方式我们采用的是Range策略方式&#xff08;按主题给消费者消费&#xff0c;主题被谁订阅了就谁消费&#xff09; 先看下下面这个图&#xff0c;画的很丑&a…

如何达成目标笔记

如何达成目标 一、本书主要内容 推荐序一 升级你的行动工具箱 推荐序二 人们可以改变 引言 成功者和自制力的悖论 //004 自制力到底是怎样的 //007 你能做什么 //009 本书的主题 //011 1.1 准备就绪 第1章 你明白自己去往哪里吗 别说“做到最好” //017 大局与细节 //…

大数据技术之 Kafka (第 4 章 Kafka API ) Producer API

4.1.1 消息发送流程 Kafka 的 Producer 发送消息采用的是异步发送的方式。在消息发送的过程中&#xff0c;涉及到了两个线程——main 线程和 Sender 线程&#xff0c;以及一个线程共享变量——RecordAccumulator。main 线程将消息发送给 RecordAccumulator&#xff0c;Sender…

【分类器】- KNN

一、分类算法中的学习概念因为分类算法都是有监督学习&#xff0c;故分为以下2种学习。1、急切学习&#xff1a;在给定的训练元组之后、接受到测试元组之前就构造好分类模型。算法有&#xff1a;贝叶斯、基于规则的分类&#xff08;决策树&#xff09;、向后传播分类、SVM&…

Java虚拟机栈介绍

与程序计数器一样&#xff0c;Java虚拟机栈&#xff08;Java Virtual Machine Stack&#xff09;也是线程私有的&#xff0c;它的生命周期 与线程相同。虚拟机栈描述的是Java方法执行的线程内存模型&#xff1a;每个方法被执行的时候&#xff0c;Java虚拟机都 会同步创建一个栈…

《关键对话——何谓关键对话》读书笔记(一)

《关键对话——何谓关键对话》读书笔记&#xff08;一&#xff09; 利用假期的时间&#xff0c;将关键对话阅读了一遍&#xff0c;书中提到的观点&#xff0c;方法&#xff0c;场景等很适合我目前处的状态&#xff0c;有的时候读起来仿佛就是自己身临其境&#xff0c;有种感同身…

从java读取Excel继续说大道至简 .

在上一篇博客《从复杂到简单&#xff0c;大道至简》中说道我们要把复杂的问题简单化&#xff0c;也就是要把问题细分&#xff0c;让大问题变成小问题&#xff0c;这样解决起来会相对容易&#xff0c;当我们把容易的小问题解决掉了&#xff0c;大问题自动就会迎刃而解。 所以今天…

Java堆介绍

对于Java应用程序来说&#xff0c;Java堆&#xff08;Java Heap&#xff09;是虚拟机所管理的内存中最大的一块。Java堆是被所 有线程共享的一块内存区域&#xff0c;在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例&#xff0c;Java 世界里“几乎”所有的对象实例都…

推荐算法工程师的成长之道

推荐算法工程师的成长之道 原创&#xff1a; gongyouliu 大数据与人工智能 3月20日 源链接&#xff1a;原文地址 本文&#xff0c;作者会基于自己的实践经验讲述推荐算法工程师的成长之道&#xff0c;这里的“道”有发展路径和道(道理、方法论、经验、智慧)两层意思。 所以本文…

java电子商务源码解读 b2b2c o2o

大型企业分布式互联网电子商务平台&#xff0c;推出PC微信APP云服务的云商平台系统&#xff0c;其中包括B2B、B2C、C2C、O2O、新零售、直播电商等子平台。 分布式、微服务、云架构电子商务平台 java b2b2c o2o 技术解决方案 开发语言&#xff1a; java、j2ee 数据库&#x…

jQuery上传插件-uploadify3.1使用说明

uploadify &#xff0c;简单实用的flash上传组件&#xff0c;兼容性良好。 现已有html5版本。 官方地址&#xff1a;http://www.uploadify.com/ 官方英文文档&#xff1a;http://www.uploadify.com/documentation/ Demos Download 使用方法(.net版本): 前台JS $("#id&q…

《关键对话——掌握关键对话》读书笔记(二)

《关键对话——掌握关键对话》读书笔记(二) 上一节中我们已经定义了关键对话&#xff0c;在面对关键对话时&#xff08;比如老板给你安排了一项非常不合适的任务&#xff09;&#xff0c;你的选择可能只有如下两种&#xff1a; 1.当面表示反对&#xff0c;把老板惹怒 2.沉默接…

信息流推荐多样性

信息流推荐多样性 一、问题现状 信息流产品中一个常见的问题是多样性越来越差&#xff0c;造成这种问题的原因在于机器学习算法本身。下面通过一副系统循环图来介绍多样性差的问题。 资讯库随机推荐文章&#xff0c;由于是按照全库比例采样&#xff0c;娱乐占比较大&#xf…

Robocode教程2——你的第一个robo,取个好名字哦

摘自&#xff1a;http://site.douban.com/widget/notes/7736245/note/210029011/ 你需要准备的东西&#xff1a;1.c语言的知识和一点点的java知识&#xff0c;robocode意在学习java&#xff0c;不要要太深的java水平&#xff0c;你只要理解java和c的区别就可以了。2.robocode A…

《关键对话——从“心”开始,如何确定目标》读书笔记(三)

从“心”开始&#xff0c;如何确定目标、 我们的问题并不是行为本身是错误的&#xff0c;而是我们的动机有问题&#xff0c;即我们常常弄错要面对的目标。 一、从心开始 对话高手总是能做到从心开始。在开展高风险对话时&#xff0c;他们总是首先明确目的和动机&#xff0c;无…

UI设计师的面试过程

Palantir Technologies是一家提供分析、整合、可视化各种数据的IT型技术公司。在该公司&#xff0c;前端工程师和后端工程师有同样的面试过程&#xff0c;前端工程师也需要的一定的编程基础。该公司技术博客Palantir TeckBlog日前发表了一篇博文《The UI Design Interview》&am…