Malloc,指针和变量

Malloc, Pointers and Variables

本文关键字:变量 指针 Malloc      更新时间:2023-10-16

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

我的问题:

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

2) .x .y 的目的是什么?

我的想法:

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

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

我很抱歉这个长帖子,真的希望有人能帮助我。谢谢你,先生或女士提前!:)

// 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 CvPointstruct CvPoint的声明,它将声明所有成员变量和函数。

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

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

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

在您的示例上下文中,老实说,它没有多大意义,因为它尚未初始化。 内存已创建,但值都将是内存的内容,直到分配空间的点(出于所有意图和目的,都是荒谬的)。

2) .x .y 的目的是什么?

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

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