您的位置:首页 > 编程语言 > C语言/C++

【C语言】C语言动态分配内存

2015-06-12 11:39 447 查看
C语言动态分配内存 

一维数组

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
int i = 0;
int N = 0;
int *arr = NULL;

scanf("%d",&N);

arr = (int *)malloc(N*sizeof(int));
memset(arr,0,N*sizeof(int));

for (i = 0; i < N; i++)
{
scanf("%d",arr+i);
}

for (i = 0; i < N; i++)
{
printf("%-3d",*(arr+i));
}

printf("\n");

free(arr);
return 0;
}


这样就动态分配了数组a
。数组的长度N可输入确定,也可用程序中的变量确定。但要注意程序结束后要用free()将其释放,否则内存会泄漏。

 二维

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
int i = 0;
int j = 0;
int N = 0;
int M = 0;
int **arr = NULL;

scanf("%d",&N);
scanf("%d",&M);
arr = (int **)malloc(N*sizeof(int*));

for (i = 0; i < N; i++)
{
*(arr+i) = (int *)malloc(M*sizeof(int));

for (j = 0; j < M; j++)
{
scanf("%d",(*(arr+i)+j));
}
}

for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
printf("%-3d",*(*(arr+i)+j));
}
printf("\n");
}

free(arr);
return 0;
}


二维数组中,如果一个维度已经确定,则使用指针数组去动态分配内存。

#include <stdio.h>
#include <stdlib.h>

#define RESIDENT_MAX 20

/**
* 指针数组
*/
int main()
{
int i = 0;
int arraySize = 0;
int (*pArray)[2] = NULL;

arraySize = rand() % RESIDENT_MAX + 1;
pArray = (int(*)[2])malloc(arraySize*sizeof(int[2]));

for (i = 0; i < arraySize; i++)
{
// Input
pArray[i][0] = i+1;
pArray[i][1] = i+2;
}

free(pArray);
return 0;
}


 

多维一个道理每增加一维 输入数据就要多一个  定义指针的时候就多一个*  且分配的时候也要多个* 还要多个for循环

三维

#include<stdlib.h>
#include<stdio.h>

int main()
{
int i = 0;
int j = 0;
int r = 0;
int rows = 0;
int columns = 0;
int num = 0;

scanf("%d %d %d",&rows,&columns,&num);
int ***p = (int ***)malloc(rows*sizeof(int**));

for(i = 0; i < columns; i++)
{
*(p+i) = (int**)malloc(columns*sizeof(int*));//**p

for(j = 0; j < num; j++)
{
*(*(p+i)+j) = (int*)malloc(num*sizeof(int));//这里可以写成*p

for(r = 0; r < num; r++)
{
*(*(*(p+i)+j)+r) = 2;
}
}
}

for (i = 0; i < columns; i++)
{
for (j = 0; j < rows; j++)
{
for (r = 0; r < num; r++)
{
printf("%d ",p[i][j][r]);
}
}

printf("\n");
}

free(p);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: