0

我是一名物理专业的学生,​​主要使用 Python 和 Matlab 进行编程,现在正在学习 C 以提高我的模拟性能。

简单的问题:Python 中有指针吗?Matlab中有指针吗?如果是,我可以像在 C 中一样“轻松”地使用它们吗?

我知道在 Python 和 Matlab 的高层次背后,有很多指针在起作用。问题是:我可以在 Python 或 Matlab 中明确地做类似这样的 C 代码吗:

int *p;
int someValue = 1;
p = &someValue;
doSomethingForMe = callSomeFunction(p);

我知道无论如何(对于大多数应用程序)这样做可能没有意义。我只是想学习。

4

2 回答 2

7

您通常会听到Python 有名称,而不是传统意义上的“变量”。它也没有“指针”,因为这样的概念仅在低级别工作时才有意义,例如使用 C。(因此,如果您在 Python 中使用 C 兼容库,例如ctypes.但是,这样的指针仅用于与 C 的互操作性。)

在 C 中使用指针的大多数功能在 Python 中以其他形式存在。例如:

  • 从函数返回多个值。在 C 语言中,您int foo(int *, int *)需要返回两个整数(可能还有一个错误代码)。在 Python 中,只需使用 tuple unpacking: x, y = foo()with return x, yin foo
  • 传递大物体。由于无论如何都是通过引用传递的,因此您可以安全地将引用传递给一个巨大的对象,而无需复制它。
  • 修改输入参数。通过选择适当的可变输入,这大部分是可能的。例如,您可以将列表传递给函数并在函数内修改列表。在 Python 中,由于引用相同,因此输入列表会出现修改:

    def change_list(l):
        l[0] = 3
    my_list = [1,2,3]
    change_list(my_list)
    print(my_list) # prints [3, 2, 3]
    

MATLAB 的变量概念与 Python 不同。在 MATLAB 中,变量是具有某些维度的矩阵。有效地写入x = y副本(适当yx设置xs 尺寸)。MATLAB 在内部进行优化以避免实际复制数据,除非必要,但对于程序员来说,它看起来好像x并且y是单独的矩阵。

MATLAB 也没有指针,除非您正在处理已编译的 MEX 扩展(它是用 C 等其他语言编写的)。与 Python 一样,您拥有无需指针即可传递事物的机制(例如,多个输入和输出参数)。

于 2013-03-08T09:01:46.433 回答
0

ctypesPython你显然可以有库的指针。此外,您可以在 Python 中模拟指针的概念,就像在这个问题中一样。

在 Matlab 中,您也没有指针。

于 2013-03-08T08:55:42.737 回答