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;
}

 

posted @ 2017-01-22 13:42  see_u  阅读(141)  评论(0编辑  收藏  举报