数组串联
在leetcode上找的一题 :
给你一个长度为 n
的整数数组 nums
。请你构建一个长度为 2n
的答案数组 ans
,数组下标 从 0 开始计数 ,对于所有 0 <= i < n
的 i
,满足下述所有要求:
ans[i] == nums[i]
ans[i + n] == nums[i]
具体而言,ans
由两个 nums
数组 串联 形成。
返回数组 ans
。
示例 1:
输入: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是变化后的数组成员数,最终返回变化后的数组地址,代码如下:(很简单就不多说了)
/**
* 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的整型二维数组,开辟好后,使用二维数组的下标访问形式,访问空间:
如果我们创建数组变量,那就是在栈区开辟数组。而我们这是在堆区开辟数组,则是纯用指针的形式开辟数组(不能用变量)。则代码如下
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]);
}
}
}
这里我们以二维数组变量创建的本质为基础去在堆区开辟二维数组。就能得出如上代码(太简单就不解释了)