在 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[]

等类型的大小