C 指向结构的指针中的元素数

C 指向结构的指针中的元素数,c,arrays,pointers,vector,struct,C,Arrays,Pointers,Vector,Struct,我至少有一年没有用C语言编写代码了,我正试图通过编写一个非常基本的校准软件来复习它。基本上我有一个PointCloudstruct typedef struct { gsl_vector ** vectors; gsl_vector * mean; } PointCloud; vectors指向gsl\u向量的数组,mean只是一个gsl\u向量,表示vectors中向量的平均值 现在假设我有一个变量PointCloud*foo,并假设它的内部变量使用malloc()动态分配内

我至少有一年没有用C语言编写代码了,我正试图通过编写一个非常基本的校准软件来复习它。基本上我有一个
PointCloud
struct

typedef struct {
    gsl_vector ** vectors;
    gsl_vector * mean;
} PointCloud;
vectors
指向
gsl\u向量的数组
mean
只是一个
gsl\u向量
,表示
vectors
中向量的平均值

现在假设我有一个变量
PointCloud*foo
,并假设它的内部变量使用
malloc()
动态分配内存并填充。让
bar=foo->vectors
。如何获取
bar
中的
gsl\u矢量数(即点云中的矢量数)?我尝试过各种组合,例如
sizeof(bar)/sizeof(bar[0])
,但这给了我输出1
sizeof(bar)
本身给我的值是8。我已经在有27个向量的点云上尝试过了。

是一个编译时操作符。当应用于某个指针时,它会给出计算机上指针的大小(在我的x86-64/Linux系统上,它是8字节),并且由于它是在编译时计算的,所以它不依赖于动态分配的堆内存区域的运行时大小


您需要保持任何动态
malloc
-ed数组或区域的大小。你可以考虑用一个A来结束<代码> Stutt,并保持它的大小作为以前的代码<结构> <代码> < /P>。在编译时,无法确定<代码>矢量>代码>中的条目数量,这是涉及<代码> siZeOS< /COD>所需的计算。您必须有办法知道
向量中有多少个条目。如果你没有那么。。。你怎么能不呢?谢谢你提供的有用信息。是的,别担心,我知道有多少,我只是懒得在结构中给它自己的变量。然后我不理解你的问题。“我只是懒得在结构中给它自己的变量。”但为什么不呢?这很简单,很容易,而且更清晰。你们应该声明向量为数组的指针,而不是指向指针的指针。