用 C 语言编写类似 Python 的指针

GEN*_*NER 0 c python pointers

我正在从 Python 过渡到 C,所以我的问题可能看起来很幼稚。我正在阅读有关 Python-C 绑定的教程,并提到:

在 C 中,所有参数都是按值传递的。如果要允许函数更改调用方中的变量,则需要传递指向该变量的指针。

问题:为什么我们不能简单地重新分配函数内部的值并且摆脱指针?

以下代码使用指针:

#include <stdio.h>
int i = 24;

int increment(int *j){
    (*j)++;
    return *j;
}
void main() {
    increment(&i);
    printf("i = %d", i);
}
Run Code Online (Sandbox Code Playgroud)

现在这可以用以下不使用指针的代码替换:

int i = 24;

int increment(int j){
    j++;
    return j;
}
void main() {
    i=increment(i);
    printf("i = %d", i);
}
Run Code Online (Sandbox Code Playgroud)

Bar*_*mar 6

您只能从函数中返回一件事。如果需要更新多个参数,或者需要将返回值用于更新变量以外的其他内容(例如错误代码),则需要传递指向该变量的指针。

  • @tdelaney 我争论是否在我的回答中提及这一点。AFAIK,按值传递结构在 C 编程中并不常见。 (2认同)
  • 我已经在我们想要传回返回码和返回值的系统中完成了它。“go”使这种做法永垂不朽。此外,人们在返回 C++ STL 对象时可能会做比他们想象的更多的事情。我同意,这不是正常的做事方式,但是 `errno()` 太可怕了! (2认同)