C动态内存分配(被调函数内部指针内存分配)

void *malloc(size_t size);
void free(void *);
malloc在内存的动态存储区中分配一块长度为size字节的连续存储空间返回该区域的首地址

与c++中的内存分配new和delete作用相同(但c++的可适用范围更广)

当在栈区,被调函数之外需要使用被调函数内部的指针对应的地址空间是时候,有两种解决方案.

一、通过返回动态内存的指针

二、通过二级指针来保存

代码演示如下:

第一种方法

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdlib.h>
#include<string.h>//通过返回动态内存的指针
int* demo(int count)
{int* ap = NULL;ap = (int*)malloc(sizeof(int) * count);//分配给指针ap的内存大小为4*count//等价ap=new int[count];//指针赋值for (int i = 0; i < count; i++){ap[i] = 100 + i;}//输出for (int i = 0; i < count; i++){printf("*(ap+%d)=%d\n", i, *(ap + i));}return ap;
}int main()
{//两种方式调用函数内部的内存int* pointer = NULL;int count = 10;//第一种pointer = demo(count);//第二种//输出验证在main函数中调用了被调函数内部指针的内存for (int i = 0; i < count; i++){printf("*(pointrt+%d)=%d\n", i, *(pointer + i));}//释放内存free(pointer);//相当于deletereturn 0;}

 

第二种:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdlib.h>
#include<string.h>//通过返回动态内存的指针
//int* demo(int count)
//{
//	int* ap = NULL;
//
//	ap = (int*)malloc(sizeof(int) * count);//分配给指针ap的内存大小为4*count
//	//等价ap=new int[count];
//
//	//指针赋值
//	for (int i = 0; i < count; i++)
//	{
//		ap[i] = 100 + i;
//	}
//
//	//输出
//	for (int i = 0; i < count; i++)
//	{
//		printf("*(ap+%d)=%d\n", i, *(ap + i));
//	}
//	return ap;
//}//通过二级指针
void demo2(int count, int **pointer_p)
{int* ap=NULL;*pointer_p = (int *)malloc(sizeof(int) * count);ap = *pointer_p;//相当于pointer的地址//赋值for (int i = 0; i < count; i++){ap[i] = 100 + i;}//输出for (int i = 0; i < count; i++){printf("*(ap+%d)=%d\n", i, *(ap + i));}}int main()
{//两种方式调用函数内部的内存int* pointer = NULL;int count = 10;//第一种//pointer = demo(count);//第二种demo2(count, &pointer);//输出验证在main函数中调用了被调函数内部指针的内存for (int i = 0; i < count; i++){printf("*(pointrt+%d)=%d\n", i, *(pointer + i));}//释放内存free(pointer);//相当于deletereturn 0;}

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

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

相关文章

【LeetCode】组合两个表(mysql)

题目 编写解决方案&#xff0c;报告 Person 表中每个人的姓、名、城市和州。如果 personId 的地址不在 Address 表中&#xff0c;则报告为 null 。 以 任意顺序 返回结果表。 结果格式如下所示。 答 select firstName ,lastName,city,state from Person left join Address …

npm ERR! Cannot read properties of null (reading ‘matches‘)

1、npm install body-parser 报错npm ERR! Cannot read properties of null (reading ‘matches’) reply&#xff1a; npm cache clean --force&#xff0c;再重新安装 2、cnpm install --save core-js/modules/es.array.push.js core-js/modules/es.error.cause.js core-js/m…

Wilcoxon秩和检验-校正P值(自备)

R语言 boxplot作图 图内展示校正后的P值(padj)_r语言 p值校正-CSDN博客 FDR错误发现率-P值校正学习_fdr和p值的关系-CSDN博客 原理介绍&#xff1a; Benjamini-Hochberg 方法介绍 有N次假设检验&#xff0c;对每一次假设检验都计算其P值&#xff0c;然后将计算出的P值按照…

Docker部署Homepage个人引导页

个人名片&#xff1a; 对人间的热爱与歌颂&#xff0c;可抵岁月冗长&#x1f31e; 个人主页&#x1f468;&#x1f3fb;‍&#x1f4bb;&#xff1a;念舒_C.ying 个人博客&#x1f30f; &#xff1a;念舒_C.ying Homepage | 主页 1. 安装环境2. Docker部署 原作者&#xff1a;無…

深兰科技AI医疗健康产品获3000台采购订单

12月6日&#xff0c;武汉某企业与深兰科技签署协议&#xff0c;一次性采购3000台深兰科技AI生理健康检测仪——扁鹊。 深兰科技AI生理健康检测仪——扁鹊是深兰科技推出的人体生理指标检测产品。基于AI生物技术、融合互联网医疗及AIoT技术&#xff0c;深兰科技AI生理健康检测仪…

MySQL之导入以及导出远程备份v

目录 一.navact数据导入导出 1.1 导入 1.2 导出 二. mysqldump命令导入导出数据 2.1 导入 2.2 导出 三.load data file进行数据导入导出&#xff08;只限于单表&#xff09; 3.1 导入 3.2 导出 四.远程连接 好啦就到这里了哦!!!希望帮到你哦!!! 一.navact数据导入导…

【Docker项目实战】使用Docker部署nullboard任务管理工具

【Docker项目实战】使用Docker部署nullboard任务管理工具 一、nullboard介绍1.1 nullboard简介1.2 任务看板工具介绍 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍2.3 注意事项 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四…

【Python学习】Python学习11-元组

目录 【Python学习】Python学习11-元组 前言创建语法创建语法特殊形式访问元组操作元组元组运算符元组内置函数Python列表函数&方法参考 文章所属专区 Python学习 前言 本章节主要说明Python的Python 的元组与列表类似&#xff0c;不同之处在于元组的元素不能修改。通过小…

红队打靶练习:TOMMY BOY: 1

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb WEB robots.txt get flag1 get flag2 FTP登录 文件下载 更改代理 ffuf爆破 get flag3 crunch密码生成 wpscan 1、密码爆破 2、登录wordpress ssh登录 get flag4 信息收集 get flag5 信息收集 1、arp …

Vue3-46-Pinia-获取全局状态变量的方式

使用说明 在 Pinia 中&#xff0c;获取状态变量的方式非常的简单 &#xff1a; 就和使用对象一样。 使用思路 &#xff1a; 1、导入Store&#xff1b;2、声明Store对象&#xff1b;3、使用对象。 在逻辑代码中使用 但是 Option Store 和 Setup Store 两种方式定义的全局状态变量…

软件架构之事件驱动架构

一、定义 事件驱动的架构是围绕事件的发布、捕获、处理和存储&#xff08;或持久化&#xff09;而构建的集成模型。 某个应用或服务执行一项操作或经历另一个应用或服务可能想知道的更改时&#xff0c;就会发布一个事件&#xff08;也就是对该操作或更改的记录&#xff09;&am…

Javaweb之SpringBootWeb案例的详细解析

SpringBootWeb案例 前面我们已经讲解了Web前端开发的基础知识&#xff0c;也讲解了Web后端开发的基础(HTTP协议、请求响应)&#xff0c;并且也讲解了数据库MySQL&#xff0c;以及通过Mybatis框架如何来完成数据库的基本操作。 那接下来&#xff0c;我们就通过一个案例&#xf…