C语言中可以利用二维数组或者malloc开辟矩阵,本章将分别介绍这两种方法是如何判断矩阵维数的。
判断矩阵维数
sizeof
以二维数组创建矩阵时,可以利用sizeof判断内存的大小
例如:
-
double arr[3][4] = { 0 }; int col = (int)sizeof(*arr)/(int)sizeof(**arr);//先判断列数 int row = (int)sizeof(arr)/col/ (int)sizeof(**arr);//通过列数判断行数
上述代码中:
- sizeof(*arr)求出一行中有多少个字节,sizeof(**arr)求出第一行第一个元素所占字节大小,前者除以后者得出列数col
- sizeof(arr)求出整个二维数组的占多少个字节,除以列数得出一列元素的总字节数,再除以每个元素所占字节大小得出行数
- 因为sizeof的返回值是无符号整型,在做计算前最好将其转换成整型
_msize
sizeof(指针)并不会求出指针指向内存的大小,只会根据系统的不同返回4或者8个字节
接下来介绍_msize:
- size_t _msize( void * memblock);
- void*表示可以传入任意类型的指针
- _msize会返回在堆中分配的存储块的大小,返回值为无符号整型,单位为字节
- 需要包含头文件<malloc.h>
例如:
double** arr = (double**)malloc(sizeof(double*) * 3);//开辟行
if (arr == NULL)exit(-1);
for (i = 0; i < n; i++)
{
arr[i] = (double*)malloc(sizeof(double) * 4);//开辟列
}
int row = (int)_msize(arr) / (int)sizeof(double*);
int col = (int)_msize(*arr) / (int)sizeof(double);
上述代码中,创建了3行4列的矩阵:
- _msize(arr):计算arr指向内存的大小;创建矩阵时arr中的每个元素为double*类型,除以double*得到矩阵的行数
- _msize(*arr):计算arr中第一行内存的大小;除以doiuble类型得到矩阵的列数
利用内存的大小除以每个元素的大小来判断元素个数是非常实用的方法!