`
suoyihen
  • 浏览: 1356071 次
文章分类
社区版块
存档分类
最新评论

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在处理这类问题时确实有其简洁性,优越性。

分享到:
评论

相关推荐

    Golang 内存分配之逃逸分析

    在C/C++开发中,动态分配内存(new/malloc)需要我们手动释放资源。这样做的好处是,需要申请多少内存空间可以很好的掌握怎么分配。但是这有个缺点,如果忘记释放内存,则会导致内存泄漏。在很多高级语言中(python/Go/...

    JAVA上百实例源码以及开源项目源代码

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    JAVA上百实例源码以及开源项目

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    Java学习笔记

    JAVA吸收C和C++的优点,基础语法与C语言模式完全一样,容易掌握 JAVA健壮性高,它去掉指针、内存申请和释放、无条件转移语句,但有引用的概念,实际传递的是内存地址 (大小为4字节) JAVA提供多线程、提供动态下载...

    java开源包4

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    Java对象的生命周期

    要理解java对象的生命周期,我们需要要明白两个问题, ...在C++中,我们可以用new操作符在堆中动态申请内存,编写析构函数调用delete释放申请的内存;那么在java中究竟是内存怎样管理的呢?要弄清这个问题

    java开源包11

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包101

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包6

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包9

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包5

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包8

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包10

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包3

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包1

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java堆栈的区别 -- 详解

    会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的...

    java开源包2

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包7

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

Global site tag (gtag.js) - Google Analytics