c++数组内存

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;

const int N = 5;
const int n = 5;
const int m = 8;
const int M = 8;

//已知第二维
int test1()
{
char (*a)[N]; //指向数组的指针
a = new char[m][N];
printf("%d\n", sizeof(a)); //4,指针
printf("%d\n", sizeof(a[0])); //N,一维数组
delete[] a;
}

//已知第一维
int test2()
{
char* a[M]; //指针的数组
for(int i=0; i<M; i++)
a[i] = new char[n];
printf("%d\n", sizeof(a)); //4*M,指针数组
printf("%d\n", sizeof(a[0])); //4,指针

for(int i=0; i<M; i++)
delete[] a[i];
}

//已知第一维,一次分配内存(保证内存的连续性)
int test3()
{
char* a[M]; //指针的数组
a[0] = new char[M*n];

for(int i=1; i<M; i++)
a[i] = a[i-1] + n;

printf("%d\n", sizeof(a)); //4*M,指针数组
printf("%d\n", sizeof(a[0])); //4,指针
delete[] a[0];
}

//两维都未知
int test4()
{
char **a;
a = new char* [m]; //分配指针数组

for(int i=0; i<m; i++)
a[i] = new char[n]; //分配每个指针所指向的数组

printf("%d\n", sizeof(a)); //4,指针
printf("%d\n", sizeof(a[0])); //4,指针

for(int i=0; i<m; i++)
delete[] a[i];

delete[] a;
}

//两维都未知,一次分配内存(保证内存的连续性)
int test5()
{
char **a;
a = new char* [m];

a[0] = new char[m * n]; //一次性分配所有空间

for(int i=1; i<m; i++)
a[i] = a[i-1] + n; //分配每个指针所指向的数组

printf("%d\n", sizeof(a)); //4,指针
printf("%d\n", sizeof(a[0])); //4,指针

delete[] a[0];
delete[] a;
}

int main()
{
test1();
test2();
test3();
test4();
test5();
return 0;
}

时间: 2024-08-03 07:00:19

c++数组内存的相关文章

动态数组,数组初始化,数组内存释放,向数组中添加一个元素,向数组中添加多个元素,数组打印,顺序查找,二分查找,查找数组并返回地址,冒泡排序,改变数组中某个元素的值,删除一个数值,删除所有,查找含有

 1定义接口: Num.h #ifndef_NUM_H_ #define_NUM_H_ #include<stdio.h> #include<stdlib.h> /************************************************************************/ /*数组的结构体类型                                                    */ /*******************

C语言动态分配二维数组内存

C语言内存管理主要包括malloc().remalloc().free()三个函数. malloc原型 extern void *malloc(unsigned int num_bytes); m行n列的 二维数组的分配,主要有三种方法: 一.分配一个长度为m的二级指针,指针的指向的内容分别指向一个长度为n的一位数组 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h>

C#有关数组内存的释放及动态数组问题

一.数组内存释放问题 数组内存的释放可以按照如下语句实现: string [] aa=new string[2]; aa[0]="A"; aa[1]="B"; aa=null; 其中最后一句:aa=null就是释放内存的. 二.关于动态数组 动态数组可以按以下方式申明: string[,] aa; 然后在任何要使用该数组的地方,都可以重新定义数组的大小: aa=new string[2,3];

double,long double及各变量数组内存开销

IEEE754浮点数的表示方法.C语言里对float类型数据的表示范围为-3.4*10^38-+3.4*10^38.double为-1.7*10^-308~1.7*10^308,long double为-1.2*10^-4932~1.2*10^4932. 类型 比特(位)数 有效数字 数值范围 float 32 6~7 -3.4*10^38-+3.4*10^38 double 64 15~16 -1.7*10^-308~1.7*10^308 long double 128 18~19 -1.2*

[java小笔记] 关于数组内存管理的理解

数组是大多数编程语言都提供的一种复合结构,如果程序需要多个类型相同的变量时,就可以考虑定义一个数组,java语言的数组变量时引用类型的变量,因此具有java引用变量的特性.在使用数组之前必须对数组对象进行初始化,当所有的数组元素都被分配了合适的内存空间,并指定了初始值是,数组初始化完成. 数组初始化分为 1.静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组的长度. 语法形式: int[] y = {1,2,3,4,5}; 2.动态初始化:初始化时程序员只指定数组的长度,由

python科学计算_numpy_线性代数/掩码数组/内存映射数组

1. 线性代数 numpy对于多维数组的运算在默认情况下并不使用矩阵运算,进行矩阵运算可以通过matrix对象或者矩阵函数来进行: matrix对象由matrix类创建,其四则运算都默认采用矩阵运算,和matlab十>分相似: a = np.matrix([[1,2,3],[4,5,6],[7,8,9]]) matrix([[1, 2, 3],[4, 5, 6],[7, 8, 9]]) a * a matrix([[ 30, 36, 42],[ 66, 81, 96],[102, 126, 15

【二维数组内存申请】

前要:内存申请与释放 头文件:#include <stdlib.h> 申请: malloc(配置内存空间) 相关函数 calloc,free,realloc,brk函数原型 void * malloc(size_t size);一般使用时会将void改为自定义型如: double **pd=NULL; pd =(double **)malloc( sizeof(double *)*n); for(int i=0;i<n;i++) pd[i]=(double *)malloc(n*size

数组内存申请和释放,指针数组和数组指针

总结 对于指针数组的理解:按照字面意思,首先是指针,其次是数组,就表明这是一个数组,不过数组里面存储的指针.``` // 使用指针数组 int **ptr = new int*[4]; for(int i = 0; i < 4; ++i) { *(ptr+i) = new int [3]; }```如代码所示:new int * [4],表明这是一个数组,数组里面存储的是 int *类型的指针.而等号左值 int ** ptr,首先要看(int *)*ptr ,表明这一个指针,其指向了int *

数组内存如何分配

第一个问题: int [] test = new test[100]; 我知道在堆中分配了100个单元的内存空间,但是在栈中存储的是堆中的地址,问栈中分配了几个单元的内存空间来存地址呢?我自己查了下栈中好像是只保存了堆中100个单元的首地址,不大确定,求解?还有就是如果栈中只分配了一个单元存储堆中首地址的话,那我们test[10]这样查数组中的某个元素怎么定位的,是到堆中遍历数组吗? 第二个问题: A [] test = new A[100]; A是一个类,网上是这么说的:会先在托管堆为test