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)
aPointContour
是指向 CvPoint
对象数组的指针。 aPointContour[iRandomPoint1].x
使用 iRandomPoint1
作为数组的索引,然后访问该对象中的 x
成员变量。
.x
和.y
访问对象的成员变量。这类似于访问 Python 中的对象属性。这些是 CvPoint
class 的成员。在代码的某处(可能在头文件中)寻找 class CvPoint
或 struct CvPoint
的声明,它将声明所有成员变量和函数。
这段代码唯一真正的问题是它使用了数组元素的未初始化值。 malloc()
分配内存,但不会填充任何可预测的内容。因此,除非您遗漏了填充数组的代码,否则当它访问 aPointContour[iRandomPoint1].x
和 aPointContour[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 同样荒谬。如果改为传入指针,有人可能会争辩说它正在传递给要分配的方法,但事实并非如此。
如果不先将这些值分配给某物,就没有多大意义。这就像把黑盒子里的东西倒进你的面糊里做蛋糕一样。谁知道这样的东西会做出什么样的蛋糕呢?
首先,感谢您抽出宝贵时间。我试图了解下面显示的特定代码试图将它们转换为 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)
aPointContour
是指向CvPoint
对象数组的指针。aPointContour[iRandomPoint1].x
使用iRandomPoint1
作为数组的索引,然后访问该对象中的x
成员变量。.x
和.y
访问对象的成员变量。这类似于访问 Python 中的对象属性。这些是CvPoint
class 的成员。在代码的某处(可能在头文件中)寻找class CvPoint
或struct CvPoint
的声明,它将声明所有成员变量和函数。
这段代码唯一真正的问题是它使用了数组元素的未初始化值。 malloc()
分配内存,但不会填充任何可预测的内容。因此,除非您遗漏了填充数组的代码,否则当它访问 aPointContour[iRandomPoint1].x
和 aPointContour[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 同样荒谬。如果改为传入指针,有人可能会争辩说它正在传递给要分配的方法,但事实并非如此。
如果不先将这些值分配给某物,就没有多大意义。这就像把黑盒子里的东西倒进你的面糊里做蛋糕一样。谁知道这样的东西会做出什么样的蛋糕呢?