前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >动态内存管理的题目

动态内存管理的题目

作者头像
E绵绵
发布2024-04-08 21:05:12
600
发布2024-04-08 21:05:12
举报
文章被收录于专栏:编程学习之路编程学习之路

数组串联 

在leetcode上找的一题 :

给你一个长度为 n 的整数数组 nums 。请你构建一个长度为 2n 的答案数组 ans ,数组下标 从 0 开始计数 ,对于所有 0 <= i < n 的 i ,满足下述所有要求:

  • ans[i] == nums[i]
  • ans[i + n] == nums[i]

具体而言,ans 由两个 nums 数组 串联 形成。

返回数组 ans 。

示例 1:

代码语言:javascript
复制
输入:nums = [1,2,1]
输出:[1,2,1,1,2,1]
解释:数组 ans 按下述方式形成:
- ans = [nums[0],nums[1],nums[2],nums[0],nums[1],nums[2]]
- ans = [1,2,1,1,2,1]

 这题很简单,nums是原数组的地址,numsize是原数组的成员数,returnsize是变化后的数组成员数,最终返回变化后的数组地址,代码如下:(很简单就不多说了)

代码语言:javascript
复制
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* getConcatenation(int* nums, int numsSize, int* returnSize) {
  
  int* ret= (int *)malloc(numsSize*sizeof(int)*2);
   for(int n=0;n<numsSize;n++)
   {
       ret[n]=nums[n];
   }
   for(int n=0;n<numsSize;n++)
   {
       ret[numsSize+n]=nums[n];
   }
   *returnSize=2*numsSize;
return ret;
}

在堆区开辟数组

题目:使用malloc函数模拟开辟一个3*5的整型二维数组,开辟好后,使用二维数组的下标访问形式,访问空间:

如果我们创建数组变量,那就是在栈区开辟数组。而我们这是在堆区开辟数组,则是纯用指针的形式开辟数组(不能用变量)。则代码如下

代码语言:javascript
复制
int main()
{
	int(*arr)[5] = (int(*)[5])malloc(15);

	for (int a = 0; a < 3; a++)
	{
		for (int b = 0; b < 5; b++)
		{
			arr[a][b] = 100;;
		}

	}
	for (int a = 0; a < 3; a++)
	{
		for (int b = 0; b < 5; b++)
		{
			printf("%d ", arr[a][b]);
		}

	}
	
}

这里我们以二维数组变量创建的本质为基础去在堆区开辟二维数组。就能得出如上代码(太简单就不解释了)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数组串联 
  • 在堆区开辟数组
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档