我没有在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个向量的点云上试过这个。
答案 0 :(得分:0)
sizeof
operator是编译时运算符。当应用于某个指针时,它会给出机器上指针的大小(在我的x86-64 / Linux系统上它是8个字节),并且因为它是在编译时计算的,所以它不依赖于运行时的大小。动态分配堆内存区域。
您需要保留任何动态malloc
- ed数组或区域的大小。您可以考虑使用flexible array member结束struct
,并将其大小保留为struct
的先前成员