2017.11.17 C++系列---用malloc动态给c++二维数组的申请与释放操作
方法一:利用二级指针申请一个二维数组。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int **a; //用二级指针动态申请二维数组
int i,j;
int m,n;
printf("请输入行数\n");
scanf("%d",&m);
printf("请输入列数\n");
scanf("%d",&n);
a=(int**)malloc(sizeof(int*)*m);
for(i=0;i<m;i++)
a[i]=(int*)malloc(sizeof(int)*n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%p\n",&a[i][j]); //输出每个元素地址,每行的列与列之间的地址时连续的,行与行之间的地址不连续
}
}
for(i=0;i<m;i++)
free(a[i]);
free(a);
return 0;
}
方法二:用数组指针形式申请一个二维数组。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,j;
//申请一个3行2列的整型数组
int (*a)[2]=(int(*)[2])malloc(sizeof(int)*3*2);
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
printf("%p\n",&a[i][j]); //输出数组每个元素地址,每个元素的地址是连续的
}
}
free(a);
return 0;
}
方法三:用一个单独的一维数组来模拟二维数组。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int nrows,ncolumns;
int *Array;
int i,j;
printf("please input nrows&ncolumns:\n");
scanf("%d%d",&nrows,&ncolumns);
Array=(int *)malloc(nrows*ncolumns*sizeof(int)); //申请内存空间
for(i=0;i<nrows;i++)
{
for(j=0;j<ncolumns;j++)
{
Array[i*ncolumns+j]=1;
printf("%d ",Array[i*ncolumns+j]); //用Array[i*ncolumns+j] 访问第i,j个成员
}
printf("\n");
}
free(Array);
return 0;
}
两种方法:
1、先定义一个一维数组的类型,然后再用该类型定义一个一维数组(实际上已经成为二维的)
相当于递归定义
typedef int array[COL]; //使用typedef定义一个具有COL个元素的数组类型
array *a; //定义二维数组,与一维数组相同
a=new array[row]; //为该一维数组(实际上二维)申请空间
该方法定义的动态二维数组的释放只需以下语句即可:
delete[] a;
a=NULL;
2、 使用数组指针,分配一个指针数组,将其首地址保存在b中,然后再为指针数组的每个元素分配一个数组
int **b=new int*[row]; //分配一个指针数组,将其首地址保存b中
for(i=0;i<row;i++) //为指针数组的每个元素分配一个数组
b[i]=new int[col];
该方法定义的动态二维数组的释放需先释放指针数组的每个元素指向的数组,然后再释放该指针数组:
for(i=0;i<row;i++)
{
delete [col]b[i];
b[i]=NULL;
}
delete [row]b;
b=NULL;
2017.11.17 C++系列---用malloc动态给c++二维数组的申请与释放操作的更多相关文章
- 如何用 new 来动态开辟一个二维数组
一般的做法是: int **p = new int*[m]; //m行n列型 for (i = 0; i < m; ++i) { p[i] = new int[n]; for (j = 0; j ...
- c++ 利用new动态的定义二维数组
#include <iostream> using namespace std; int main() { , col = ; // key code: 申请空间 int **edge = ...
- c++ 利用容器vector动态的定义二维数组
#include <iostream> #include <vector> using namespace std; int main() { int row, column; ...
- 2017.12.10 Java写一个杨辉三角(二维数组的应用)
杨辉三角的定律 第n行m列元素通项公式为: C(n-1,m-1)=(n-1)!/[(m-1)!(n-m)!] 需要用到创建二维数组 package com.glut.demo; /** * 杨辉三角 ...
- C++ 动态多维数组的申请与释放
今天在实验室的项目中遇到了一个问题,直接上代码: void ViBe::init(Mat img) { imgcol = img.cols; imgrow = img.rows; // 动态分配三维数 ...
- 如何在C++中动态建立二维数组(转)
http://blog.sina.com.cn/s/blog_7c073a8d0100qp1w.html http://blog.163.com/wujiaxing009@126/blog/stati ...
- C++二维数组动态申请内存
好久没用C++刷题了,今天早上刷了几条题,感觉很陌生了.怪我,大二下实在太颓废了,没啥作为. 今天更新个关于c++二维数组内存申请的问题,当初作为菜鸟初学指针的时候,还是在这方面有点搞不通的.今天用到 ...
- c中使用malloc动态申请二维数组
前言 今天写代码的时候,想要动态的申请一个二维数组空间,思索了一段时间才写出来,这里记录一下吧,以后就不至于再浪费时间了.下面以申请int型数组作为例子: 申请一维数组 一维数组的数组名可以看成数组起 ...
- 微信小程序动态生成保存二维码
起源:最近小程序需要涉及到一些推广方面的功能,所以要写一个动态生成二维码用户进行下载分享,写完之后受益良多,特此来分享一下: 一.微信小程序动态生成保存二维码 wxml: <view class ...
随机推荐
- c++11 多线程 1
第3章 线程间共享数据 本章主要内容 共享数据带来的问题 使用互斥量保护数据 数据保护的替代方案 保护共享数据结构的最基本的方式,是使用C++标准库提供的互斥量(mutex). 清单3.1 使用互斥量 ...
- Kafka monitoring监控
一.Metrics kafka有两个metrics包,在看源码的时候很容易混淆 package kafka.metrics package org.apache.kafka.common.metric ...
- python fork函数
import os print('---父进程id:%s----'%(os.getpid())) pid=os.fork()#只能在liunx环境下执行 print('---%s---' % (os. ...
- 转:Android开源项目推荐之「网络请求哪家强」 Android开源项目推荐之「网络请求哪家强」
转载自https://zhuanlan.zhihu.com/p/21879931 1. 原则 本篇说的网络请求专指 http 请求,在选择一个框架之前,我个人有个习惯,就是我喜欢选择专注的库,其实在软 ...
- spring boot基本认识
大家眼中的spring boot:https://www.zhihu.com/question/39483566-------------------------------------------- ...
- pat04-树5. File Transfer (25)
04-树5. File Transfer (25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue We have ...
- 合并Gridview单元格
Introduction There are a lot of methods in the Internet solving the problem of how to merge GridView ...
- SQL Server和ASP.NET的操作基本操作
ado.net提供了丰富的数据库操作,这些操作可以分为三个步骤: 第一,使用SqlConnection对象连接数据库: 第二,建立SqlCommand对象,负责SQL语句的执行和存储过程的调用: 第三 ...
- 第三方缓存软件memcached和redis异同
memcached和redis相同点:都是以键值对的形式来存储数据,通俗讲就是一个大的hashtable缓存数据都是存在内容中 key-value 不同点:memcached:1.一个key所对应的值 ...
- Spring课程 Spring入门篇 3-3 Spring bean装配(上)之aware接口
课程链接: 本节主要介绍了以下内容: 1 aware介绍 2 代码演练 3 课程总结 1 aware介绍 1.1 为什么要使用aware? 在java类中,可以方便的获取xml配置文件中的bean的各 ...