在 C 上动态声明的矩阵的大小
Size of a Matrix declared dynamically on C
我已经动态声明了一个矩阵如下
double **y;
y = (double **)malloc(n*sizeof(double *));
for(i=0;i<n;i++)
y[i]=(double*)malloc(m*sizeof(double));
其中m和n是之前声明的整数。
然后,我需要计算一个将两个不同矩阵相乘的函数,并且我需要检查第一个矩阵的行数是否与第二个矩阵的列数一致。所以我需要知道列数和行数。
所以我计算了以下内容:
int k=sizeof(M[0])/sizeof(double);
但是这个整数k returns me 1.不管n和m有多长...
我做错了什么?
谢谢,对不起我的英语。
您不能对动态创建的数组使用 sizeof 运算符来获取数组大小。如果数组是动态创建的,知道它大小的唯一选择是将它存储在某个地方。
使用 sizeof(M[0])
只能得到 M[0]
的 类型 大小,即 double *
,在你的情况下与 [= 的大小相同13=]
因此在您的情况下,您必须保存分配的数组 (n, m) 的大小。
另一种解决方案是使用堆栈分配,其中 sizeof
实际上可以获得 double[]
等类型的大小
我已经动态声明了一个矩阵如下
double **y;
y = (double **)malloc(n*sizeof(double *));
for(i=0;i<n;i++)
y[i]=(double*)malloc(m*sizeof(double));
其中m和n是之前声明的整数。 然后,我需要计算一个将两个不同矩阵相乘的函数,并且我需要检查第一个矩阵的行数是否与第二个矩阵的列数一致。所以我需要知道列数和行数。 所以我计算了以下内容:
int k=sizeof(M[0])/sizeof(double);
但是这个整数k returns me 1.不管n和m有多长...
我做错了什么?
谢谢,对不起我的英语。
您不能对动态创建的数组使用 sizeof 运算符来获取数组大小。如果数组是动态创建的,知道它大小的唯一选择是将它存储在某个地方。
使用 sizeof(M[0])
只能得到 M[0]
的 类型 大小,即 double *
,在你的情况下与 [= 的大小相同13=]
因此在您的情况下,您必须保存分配的数组 (n, m) 的大小。
另一种解决方案是使用堆栈分配,其中 sizeof
实际上可以获得 double[]