动态数组与普通数组在内存分配上的区别
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; }
如果采用这种分配,就不会出现空隙
相关文章推荐
- 内存的静态分配和动态分配的区别
- 内存的静态分配和动态分配的区别【转】
- C++中关于[]静态数组和new分配的动态数组的区别分析
- 内存的静态分配和动态分配的区别
- 简单理解动态内存分配和静态内存分配的区别
- 动态内存分配 数组
- 内存的静态分配和动态分配的区别(转)
- 由动态分配和静态分配的数据在内存组成区别
- C与C++动态分配,释放内存的区别
- C和C++动态内存分配和释放的区别
- c/c++动态内存分配的区别
- C语言中内存的动态分配与释放(多维动态数组构建)
- c语言中内存的动态分配与释放(多维动态数组构建)
- 百度电面题 C和C++ 语言动态内存分配 的区别
- C++中数组的动态分配以及内存分配的方式
- [笔试] C和C++动态内存分配和释放的区别
- 内存分配之动态数组
- 静态与动态内存分配的主要区别
- c语言中内存的动态分配与释放(多维动态数组构建)
- 动态内存分配- new/delete 和malloc/free的区别