在C中通过引用传递过程中会发生什么?

Sha*_*ash 5 c string pointers pass-by-reference

我知道当我们将一个参数传递给函数时,会在函数的堆栈中创建一个副本,并且调用者函数中参数的实际值没有变化.

将指针传递给函数时会发生什么?我知道参数的值确实在调用者函数被改变了.但它是如何在内部发生的?被调用函数如何访问调用者函数中的变量?

我试图从wikipeidia的Call_by_reference页面获取信息,但并不重要.

一旦我开始阅读有关字符串并将字符串作为参数传递给其他函数,我对此感到困惑.任何有关这方面的帮助都会有很大帮助.谢谢!!!!

Fre*_*Foo 9

将指针传递给函数时,指针会被复制.但是,指向对象的指针的副本x也是指向x它的指针,因此可以用它来修改x.

对于(人为的)类比,假设那x是你的房子.根据C的规则,当你需要一个水管工来修理你房子里的东西时,你可以把你的房子的副本传给水管工,让他们解决这个问题,并将副本交给你.毋庸置疑,对于大于几个字节的房屋,由于所有复制,效率非常低.所以相反,你给管道工一个指向你房子(它的地址)的指针,这样管道工就可以进入你的房子并当场修理它.这就是所引用的调用:你不传递你想要修改的数据,而是传递指向该数据的指针,以便被调用者知道在哪个位置操作而不是仅在哪个值上操作.

const int broken = 0, fixed = 1;

struct House {
    int plumbing;
};

void plumber(House *h)
{
    h->plumbing = fixed;
}

int main()
{
    struct House h;
    h.plumbing = broken;
    plumber(&h);          // give the plumber the address of the house,
                          // not a copy of the house
    assert(h.plumbing == fixed);
}
Run Code Online (Sandbox Code Playgroud)

在传递字符串的情况下,您传递的是指向char字符串中第一个的指针.使用指针算法,您可以获得以下元素.