Malloc、指针和变量

Malloc, Pointers and Variables

首先,感谢您抽出宝贵时间。我试图了解下面显示的特定代码试图将它们转换为 python 的目的。第一行是为指针 (aPointContour) 分配内存,我知道 python 没有。第二行是获取 iContourLenght 内的随机数。第三行将值 (2*aPointContour[iRandomPoint1].x + aPointContour[iRandomPoint1].y) 分配给矩阵 (pMatA) 在第 0 行和第 0 列。

我的问题:

1) "aPointContour[iRandomPoint1].x" 想做什么?

2) .x .y的用途?

我的想法:

1) 访问指针 "aPointContour" 内位于 "iRandomPoint1" 的内存。需要放入矩阵 "pMatA" 的值是“2*iRandomPoint1”,根据下面的代码访问内存不应该给我们 "iRandomPoint1" 值?

2) .x 和.y 是Cvpoint 的一部分还是通常用作指针"aPointContour" 的成员?如果是会员,是仅供参考还是具有实际数学意义?

很抱歉post,真的希望有人能帮助我。提前谢谢任何好心的先生或女士! :)

// C++
CvPoint *aPointContour = (CvPoint *) malloc(sizeof(CvPoint) * iContourLength);
iRandomPoint1 = (int)((double)rand() / ((double)RAND_MAX + 1) * iContourLength);
cvmSet(pMatA, 0, 0,2* aPointContour[iRandomPoint1].x + aPointContour[iRandomPoint1].y)
  1. aPointContour 是指向 CvPoint 对象数组的指针。 aPointContour[iRandomPoint1].x 使用 iRandomPoint1 作为数组的索引,然后访问该对象中的 x 成员变量。

  2. .x.y访问对象的成员变量。这类似于访问 Python 中的对象属性。这些是 CvPoint class 的成员。在代码的某处(可能在头文件中)寻找 class CvPointstruct CvPoint 的声明,它将声明所有成员变量和函数。

这段代码唯一真正的问题是它使用了数组元素的未初始化值。 malloc() 分配内存,但不会填充任何可预测的内容。因此,除非您遗漏了填充数组的代码,否则当它访问 aPointContour[iRandomPoint1].xaPointContour[iRandomPoint1].y 时,会发生未定义的行为。

1) What is "aPointContour[iRandomPoint1].x" trying to do?

好吧,让我们从 iRandomPoint1 开始吧。它是一个介于 0 和 iContourLength 之间的整数,即数组 aPointContour 的大小。因此 aPointContour[iRandomPoint1] 是由第一行初始化的随机 CvPoint。 aPointContour[iRandomPoint1].x 正在访问 CvPoint 的 x 值。

在您的示例的上下文中,老实说它没有多大意义,因为它还没有被初始化。内存已创建,但值将全部是内存的内容,直到 space 被分配(出于所有意图和目的,无意义)。

2) The purpose of .x .y?

".x" 表示 return 类型 CvPoint 表示的 x 的值。同样在这段代码的上下文中,它是未分配的,因此是无意义的。添加 aPointContour[iRandomPoint1].x 与 aPointContour[iRandomPoint1].y 同样荒谬。如果改为传入指针,有人可能会争辩说它正在传递给要分配的方法,但事实并非如此。

如果不先将这些值分配给某物,就没有多大意义。这就像把黑盒子里的东西倒进你的面糊里做蛋糕一样。谁知道这样的东西会做出什么样的蛋糕呢?