C++分析研究  
C++
日历
<2013年2月>
272829303112
3456789
10111213141516
17181920212223
242526272812
3456789
统计
  • 随笔 - 92
  • 文章 - 4
  • 评论 - 4
  • 引用 - 0

导航

常用链接

留言簿

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 

  对于二维数组和二维指针的内存的分配
  这里首选说一下一维指针和一维数组的内存分配情况。
  一维:
  数组:形如int a[5];这里定义了一个一维数组a,并且数组的元素个数是5,这里的a是这五个元素的整体表示,也就是通过a我们能找到这五个元素。注意:a是代表数组第一个元素的首地址。&a是代表数组的地址,虽然它们的值相同。
  指针: int *p = NULL;这里p是一个指针,它指向的是计算
  机内一块存储int类型的内存。P = a;就是让p等于刚才申请的数组的第一个元素的地址。所以通过p我们也能找到那5个元素所以P[i]跟a[i]的作用一样。
  注意:
  1:int *p = NULL; p的大小在32位机器是4,即使p=a;之后p的sizeof(p)仍然等于4.
  2:在声明之后,数组必须分配内存进行初始化。而指针一般是动态分配其指向的内存。
  3:不要混淆指针和数组,指针就是指针,数组就是数组,只是数组在一定条件下可以转换成指针。不要将指针和数组混淆。(例如:指针有++,--操作,数组则不可以)。
  一维指针的动态内存分配:
  int *p = NULL;
  p = new int[N];
  千万别忘了delete
  delete [] p;
  p = NULL;
  二维数组的内存分配
  int a[2][3]; 这里分配了一个2X3=6个int大小的数组。二维数组的第二个维度3不能省略。
  二维数组的内存在计算机内也是连续的一片地址,只不过每3个元素构成一个一维数组a[i],这里的a[i]代表维度为3的数组的第一个元素的地址。所以a[i][j]的访问跟a[i]的访问也就清楚了。这里的a[i]其实是一个一维数组的第一个元素的地址。
  对于二维数组做实参,我们通常用一维指针处理,例如:
  1 #include
  2 void test(int *p)
  3 {
  4 for (int i = 0;i<3;++i)
  5 {
  6 for(int j = 0;j<3;++j)
  7 {
  8 std::cout《*(p+3*i+j); //一维处理
  9 }
  10 }
  11 }
  12 int main(void)
  13 {
  14 int a[3][3]={1,2,3,4,5,6,7,0,0};
  15 test((int*)a); //将二维数组当做一维处理
  16 system("pause");
  17 return 0;
  18 }
  这些想必书上讲的都非常清楚。
  二维数组的C++动态内存分配。
  二维指针的动态数组分配:二维指针类似指针数组的分配
  int **p;
  1 #include
  2 int main(void)
  3 {
  4 int **p = NULL; //这里申请一个3x4的二维数组
  5 p = new int *[3]; //分配一维指针,分配三个int* 类型的一维指针。
  6 for (int i = 0;i < 3; ++i)
  7 {
  8 p[i] = new int[4];
  9 }
  10 for (int i = 0; i < 3; ++i)
  11 {
  12 for(int j = 0; j < 4 ; ++j)
  13 {
  14 p[i][j] = i*j;
  15 std::cout<
  26 return 0;
  27 }
  指针数组的动态内存分配
  指针数组的动态内存分配只需要对指针数组的数组元素指针分别分配内存即可,比二维指针的分配少了一个环节。
  1 #include托福答案
  2 int main(void)
  3 {
  4 int *a[3]; //申请含有三个int* 类型的指针数组
  5 //跟二维指针不同的是,这里数组a不用手动申请内存
  6 for (int i = 0;i < 3;++i) //申请一个3x4的空间
  7 {
  8 a[i] = new int[4];
  9 }
  10 for (int i = 0; i<3 ;++i)
  11 {
  12 for (int j = 0; j<4; ++j)
  13 {
  14 a[i][j] = i*j;
  15 std::cout<
  25 return 0;
  26 }
  数组指针的动态内存分配
  数组指针就是指向数组的指针,说白了就是指向一个数组整体,因此分配的时候直接申请一片内存地址即可。跟二维数组的静态分配类似。
  1 // Karllen
  2 int main(void)
  3 {
  4 int (*a)[4]; //这里的4是第二维的维度,a的增量的基数为4个int
  5 a = new int[3][4];
  6 delete []a;
  7 a = NULL;
  8 return 0;
  9 }

posted on 2014-05-28 20:29 HAOSOLA 阅读(410) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


 
Copyright © HAOSOLA Powered by: 博客园 模板提供:沪江博客
PK10开奖 PK10开奖