C语言一些总结(1)—二维指针数组初始化

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tingfenghanlei/article/details/85066486

二维指针数组初始化

行数为:row

列数为:column

方式一:

int **dp1;
dp1 = (int **)malloc(sizeof(int *) * row);//分配指针数组,计算行的大小
for(int i=0; i<row; i++)
{
   dp1[i] = (int *)malloc(sizeof(int) * (column));//分配每个指针所指向的数组,再计算列
}

方式二:

 int*ptr[row];

 for(int i=0;i<row;i++)
  {
      ptr[i]=(int*)malloc(sizeof(int)*column);
  }

方式三:

int (*ptr)[column];
//方式一
ptr=(int(*)[column])malloc(sizeof(int)*row*column);

//方式二
for(int i=0;i<N;i++)
{
   ptr[i]=(int [column])malloc(sizeof(int)*column);
}

定义如下3个二维数组和二维指针进行说明:

1.  int **ptr;   //内存占用4个自己,也就是一个指针

2.  int *ptr[M]; //占用4*M个自己

3.  int (*ptr)[M];//占用4个字节

以上都是存放整数的二维数组,并且可以通过ptr[i][j]的形式访问内容,但是它们之间有很大差别,一些依照文中提到的方面

进行分析。


三个ptr本身都是指针,并且是二维指针,但是它们的最终内容总是整数,但中间内容,如ptr[i]并不是正式,而是指针int*

1.int**ptr 表示指向(一组指向整数数据指针)的指针

2.int *ptr[M]是指针数组,表示指向(M个指向整形数指针)的指针

3. int(*ptr)[M]表示指向一组(指向包含M个整形数据的指针)的指针。


参考链接:https://blog.csdn.net/nanjoh/article/details/54406988

另外补充一个小技巧。

求二维数组的总行数和总列数。

行数 = sizeof(array)/sizeof(array[0]);
列数 = sizeof(array[0])/sizeof(array[0][0]);

 

展开阅读全文

没有更多推荐了,返回首页