我至少有一年没有用C编写代码,并且正试图通过编写一个非常基本的校准软件来完善它。基本上我有一个PointCloud
结构
typedef struct {
gsl_vector ** vectors;
gsl_vector * mean;
} PointCloud;
vectors
指向gsl_vectors
的数组,而mean
只是表示gsl_vector
中向量均值的vectors
。现在假设我有一个变量
PointCloud * foo
,并假定其内部变量具有使用malloc()
动态分配的内存并已填充。让bar = foo -> vectors
。如何获得gsl_vectors
中的bar
数(即点云中的向量数)?我尝试了各种组合,例如sizeof(bar)/sizeof(bar[0])
,但是给了我输出1。sizeof(bar)
本身给了我值8。我已经在具有27个向量的点云上进行了尝试。 最佳答案
sizeof
operator是编译时运算符。当应用于某些指针时,它给出了您的计算机上指针的大小(在我的x86-64 / Linux系统上为8字节),并且由于它是在编译时计算的,因此它并不取决于编译器的运行时大小。动态分配的堆内存区域。
您需要将任何动态malloc
-ed数组或区域的大小保持在某个地方。您可以考虑以flexible array member结尾struct
并保持其大小为该struct
的前一个成员