您的位置:首页 > 其它

动态数组与普通数组在内存分配上的区别

2013-04-15 11:42 405 查看
//
//  main.cpp
//  test
//
//  Created by Cong on 13-3-24.
//  Copyright (c) 2013年 liuchyin. All rights reserved.
//

#include <iostream>
#include <iterator>
using namespace std;

int main(){
//int **matrix = new int*[5];
//matrix[0] = new int[5];

//int* x = new int[5];
int matrix[5][5];
//for(int i = 0; i != 5; ++i)
//matrix[i] = new int[5];

//memset(matrix[0], 0, 5 * 5 * sizeof(int));

for(int i = 0; i != 5; ++i){
for(int j = 0; j != 5; ++j)
matrix[i][j] = 1;
}
copy(matrix[0], matrix[0] + 25, ostream_iterator<int>(cout, " "));
cout<<endl;
for(int i = 0; i != 5; ++i){
for(int j = 0; j != 5; ++j)
cout<<matrix[i][j]<<" ";
}
cout<<endl;
cout<<matrix[0][5]<<endl;

int **matrix1 = new int*[5];
matrix1[0] = new int[5];

int* x = new int[5];
for(int i = 1; i != 5; ++i)
matrix1[i] = new int[5];

//memset(matrix[0], 0, 5 * 5 * sizeof(int));

for(int i = 0; i != 5; ++i){
for(int j = 0; j != 5; ++j)
matrix1[i][j] = 1;
}
copy(matrix1[0], matrix1[0] + 25, ostream_iterator<int>(cout, " "));
cout<<endl;
for(int i = 0; i != 5; ++i){
for(int j = 0; j != 5; ++j)
cout<<matrix1[i][j]<<" ";
}
cout<<endl;
cout<<matrix1[0][5]<<endl;

int **matrix2 = new int*[5];

for(int i = 0; i != 5; ++i)
matrix2[i] = new int[5];

//memset(matrix[0], 0, 5 * 5 * sizeof(int));

for(int i = 0; i != 5; ++i){
for(int j = 0; j != 5; ++j)
matrix2[i][j] = 1;
}
copy(matrix2[0], matrix2[0] + 25, ostream_iterator<int>(cout, " "));
cout<<endl;
for(int i = 0; i != 5; ++i){
for(int j = 0; j != 5; ++j)
cout<<matrix2[i][j]<<" ";
}
cout<<endl;
cout<<matrix2[0][5]<<endl;
return 0;

}


结果是:
也就是说,在分配的内存之间有一定的空隙。。。
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
1
1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 1 
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
0
1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 1 
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
0
#include <iostream>
#include <iterator>
using namespace std;

int main(){
int *temp = new int[25];
int** matrix = new int*[5];
for(int i = 0; i != 5; ++i)
matrix[i] = temp + i * 5;
for(int i = 0; i != 5; ++i)
for(int j = 0; j != 5; ++j)
matrix[i][j] = 1;
copy(matrix[0], matrix[0] + 25, ostream_iterator<int>(cout, " "));

return 0;

}


如果采用这种分配,就不会出现空隙
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: