C/C++,JAVA中的动态内存申请

C/C++,JAVA中的动态内存申请

要: 本文总结了c/c++,java 中的动态内存申请用法;

关键词:c/c++,java,动态内存申请

1. ... 1

2. C语言... 1

2.1 三个表达式... 1

2.2 三个函数... 1

2.2.1 malloc. 1

2.2.2 calloc. 2

2.2.3 free. 3

3 C++. 3

4 JAVA. 4

5结论... 4

1.

动态内存申请平时不怎么用,导致要用时一时手足无措,现总结如下;

2. C语言

C的动态内存申请是最基础的,当然也是最晦涩,最复杂的,这一切都要拜那个神奇的指针所赐。

2.1 三个表达式

int p1[][5];

int (*p2)[5];

int* p3[5];

以上三个表达式个代表什么意思呢?其实前两个是一样的,都是指一个指针,指向5个整形的一维数组,而第三个是一个指针数组,5个元素,每个元素是一个整形指针;当然如果你对指针和数组的概念充分熟悉的话,其实这三个也是“一样的”,想想

int a[5];

int* p;

p = a;

这个例子好了;

2.2 三个函数

2.2.1 malloc

贴上代码:

#include<stdio.h>

#include<stdlib.h>

const int R = 4;

const int C = 5;

int main() {

int** p;

int i=0, j=0;

p = (int**) malloc(sizeof(int*) * R);

for(i=0; i<R; ++i) {

p[i] = (int*)malloc(sizeof(int) *C);

}

/*

for(i=0; i<R; ++i) {

for(j=0; j<C; ++j) {

p[i][j] = 0;

}

}

*/

for(i=0; i<R; ++i) {

for(j=0; j<C; ++j) {

printf("%d/t",p[i][j]);

}

printf("/n");

}

for(i=0; i<R; ++i) {

free(p[i]);

}

free(p);

}

malloc对所分配的内存块不做任何事情,这个下面的calloc有区别,所以最好把我注释掉的那两层for放出来;

2.2.2 calloc

贴上代码:

#include<stdio.h>

#include<stdlib.h>

const int N = 4;

int main() {

int* p;

int i=0;

p = (int*) calloc(N, sizeof(int));

for(i=0; i<N; ++i) {

printf("%d/t",p[i]);

}

printf("/n");

free(p);

}

说明两点:

1. calloc出来的是有初始值的,如上面的都是0

2. 其实

int* p = (int*) malloc(sizeof(int)*N);

for(int i=0; i<N: ++i) {

p[i] = 0;

}

就相当于:

int* p = (int*) calloc(N*sizeof(int));

2.2.3 free

可以参照下文c++中的delete;

3 C++

#include<iostream>

#include<iomanip>

using namespace std;

const int R = 4;

const int C = 5;

int main() {

int** p;

int i=0, j = 0;

p = new int* [R];

for(i=0; i<R; ++i) {

p[i] = new int[C];

}

for(i=0; i<R; ++i) {

for(j=0; j<C; ++j) {

p[i][j] = 0;

}

}

for(i=0; i<R; ++i) {

for(j=0; j<C; ++j) {

cout<<setw(5)<<p[i][j];

}

cout<<endl;

}

for(i=0; i<R; ++i)

delete[] p[i];

delete[] p;

}

转自《C++ primer》:动态分配数组时,如果数组元素具有类类型,将使用该类的默认构造函数实现初始化;如果数组元素是内置类型,则无初始化;

一定要delete,而且delete的顺序要和new出来的相反(构造和析构呀~~~)。

4 JAVA

Java最简单一步到位!

public class Main {

public static void main(String[] args) {

int[][] a = new int[4][5];

for (int i = 0; i < 4; ++i) {

for (int j = 0; j < 5; ++j) {

System.out.print(a[i][j]);

}

System.out.println();

}

}

}

5结论

本文给出了用c/c++,java语言进行程序设计时常用的动态内存申请方法,由本文可见,java在处理这类问题时确实有其简洁性,优越性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值