动态分配数组内存赋值后,怎样得到数组的行数和列数



动态分配数组内存赋值后,怎样得到数组的行数和列数

在做项目的时候遇到了动态分配数组内存赋值后,怎样得到数组的行数和列数的问题,下面给大家分享一下我解决这个问题的过程。

1. 首先按普通的数组,我们是怎么得到他的行数和列数的呢?

         例如:

          int a[3][4];

          cout<<sizeof(a[0])/sizeof(int);  //这个显示的是列数;为4.

2. 我们按上面的这种方法对动态分配内存后的数组进行操作,

     例如:

            int **R = new int*[10];

           for(int i=0;i<10;i++)
           {
                R[i]=new int[10];

           }

           for(int y2=0;y2<10;y2++)
           {
               for(int x2=0;x2<10;x2++)
              {
                  R[y2][x2] = 150;


               }
            }

            cout <<sizeof(*R[0])/sizeof(int);//这里肯定是不对的,不论怎么修改sizeof中的数值,输出都是不对的。
            system("pause");

    问题:为什么这样是不对的呢?

答案:动态申请返回的其他是一个指针,C/C++里函数返回不了基本类型里的数组的,返回的仅是退化后的指针数组首元素的指针,而指针是不会记录数组大小的,所以如果要在敌后得到申请的是多大,在申请时自己用一个变量来保存

问题:如果我就是想用上面的方法呢?

答案:是可以的,但是数组内的元素不能有0元素。下面我们来探讨一下这个方法。

3.这个方法:在二维数组的每一行和每一列最后都加上NULL,然后有一个嵌套循环就可以求出行数和列数。程序如下:

            int **R = new int*[10+1];

            for(int i=0;i<10+1;i++)
            {


                 R[i]=new int[10+1];

             }

            for(int y2=0;y2<10;y2++)
            {
                for(int x2=0;x2<10;x2++)
                {
                     R[y2][x2] = 150;


                 }
             }

            //再数组每行每列最后加null

           for(int y2=10;y2<10+1;y2++)
           {


                for(int x2=0;x2<10+1;x2++)
                {
                     R[y2][x2] = NULL;

                     R[x2][y2] = NULL;

 
                 }
            }

            //计算出行列数

            int i=0;

            int countx=0,county=0;

            while(*R[i]!=NULL)

            {

                  i++;

                  countx++;

 

             } 

            int j=0;

            while(R[0][j]!=NULL)

            {

                  j++;

                  county++;

 

             }

            cout <<countx<<””<<county; //得出正确结果。
            system("pause");

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值