我试图将一个简单的C程序转换成Python,但由于我对C一无所知,对Python也略知一二,这对我来说很困难。。在
我被C指针卡住了。在
有一个函数接受无符号长整型指针,并将其值添加到while循环中的某些变量:
uint32_t somename(const uint32_t *z) {
while(....) {
a += z[0]
b += z[1]
c += z[2]
z += 3
}
}
有人能告诉我如何用python完成同样的事情吗? (我完全不明白的部分是“z+=3”)
我知道python中没有指针。(至少不象C)但问题是我不知道C指针到底是做什么的,因此不能在python中实现这一点。在
z += 3
的意思是将指针下移3个元素。假设您有一个指向C中名为lst
的数组的指针,其中包含[1, 2, 3, 4]
。指针lst
指向第一个元素,这样*lst
等同于lst[0]
。此外,*(lst+1)
相当于lst[1]
。在假设z作为一个列表传递(在相应的python代码中)。
z += 3
可以转换为del z[:3]
,它将元素3移到0。 但是在python中,在执行此操作之前需要复制数组,因为使用del语句,数组会被修改。在在C中,您可以通过负索引访问指向索引之前的元素。这可以通过嵌套在类中的“不可见”偏移量来实现。访问列表时,总是将此偏移量添加到索引中。 下面的类演示该行为。在
注意pyhon还有一个列表的
+=
运算符,但这允许在末尾附加另一个列表。在Python中类似的代码片段可能是:
在C中,
z
的工作方式有点像数组索引,只是它从数组开头的任何地址开始,而不是从0开始。Python中没有类似的概念,因此需要显式地使用列表索引。在(....)
中的任何内容也需要修改。我把这个留给你练习,因为问题中没有具体说明。在相关问题 更多 >
编程相关推荐