Malloc,指针和变量
Malloc, Pointers and Variables
首先,感谢您抽出宝贵时间。我正在尝试了解下面显示的特定代码试图做什么,以便将它们转换为 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)
-
aPointContour
是指向CvPoint
对象数组的指针。aPointContour[iRandomPoint1].x
使用iRandomPoint1
作为数组的索引,然后访问该对象中的x
成员变量。 -
.x
和.y
访问对象的成员变量。这类似于在 Python 中访问对象属性。这些是CvPoint
类的成员。在代码中的某处(可能在头文件中)查找class CvPoint
或struct CvPoint
的声明,它将声明所有成员变量和函数。
此代码唯一真正的问题是它使用了数组元素的未初始化值。malloc()
分配内存,但它不会用任何可预测的东西填充它。因此,除非你省略了填充数组的代码,否则当它访问aPointContour[iRandomPoint1].x
并aPointContour[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 添加同样荒谬。 如果传入指针,人们可能会争辩说它正在传递给要分配的方法,但事实并非如此。
如果不首先将这些值分配给某些东西,就没有多大意义。 这就像将黑匣子里的东西倒进面糊里做蛋糕一样。 谁知道这样的东西会变成什么样的蛋糕?
- 将地址分配给本地指针后,公共对象的变量将消失
- 如果非动态变量被指针引用,何时超出范围?
- 在函数结束后使用指向变量的指针是否安全?
- 有没有将变量名称转换为双指针的简短方法?
- 成员变量指针的函数参数包
- C++ - 使用变量指针调用函数
- 如何返回值为NULL的变量指针
- 在编译时以增量方式构建变量指针的向量
- C 取消实例变量指针
- 每个方法调用上都覆盖了本地变量指针
- 决定对基类的变量指针进行函数调用
- 使用 valgrind 时获得 int 变量指针的无效读取大小错误
- 变量指针的成员函数未绘制到SDL_Surface?
- 何时使用成员变量指针
- 从成员变量指针返回布尔值
- 指向C#和C++之间接口的变量指针
- c++中指向self的成员变量指针
- 为什么变量指针包含相同数据类型的地址?
- 指向用户定义类型的类的全局变量指针
- C++分配一个变量指针地址