【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;
}
二维数组中,如果一个维度已经确定,则使用指针数组去动态分配内存。
多维一个道理每增加一维 输入数据就要多一个 定义指针的时候就多一个* 且分配的时候也要多个* 还要多个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;
}
一维数组
#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;
}
相关文章推荐
- c++ & * 符号的多重含义
- C++ string 字符串 知识点 小结
- 【高级算法】Lasvegas算法解决3SAT问题(C++实现代码)
- C++【操作符重载】
- C++文件操作详解
- Microsoft Visual C++ Runtime Library Runtime Error解决的方式
- Visual Studio 2013简单运行一个C++程序
- c语言实现BMP图像转换为灰度图
- C、C++写二进制数据到mysql的Blob字段/插入images
- c++ 实现结构体单链表的 创建 插入 删除等操作
- Java && C++
- 何为C语言关键字volatile
- VC++6.0选择打开文件命令时停止工作解决方法
- C++分割字符串
- C++错误 C1189
- C++ MFC Control 控件编程
- 随机生成数(C++,rand()函数)
- 【干货】国外程序员整理的 C++ 资源大全
- 单片机c语言
- 【转】C++ 文件结束符