为什么istExist这个函数不能用值传递

img

img

img

img


改为地址传递,istExist(p,name),就不会报错了这是为什么

恰好相反,istExist声明的形参不是指针,传入*p是值传递。

【以下回答由 GPT 生成】

在C++中,无法直接使用值传递来调用函数istExist的原因是因为函数istExist需要修改传入的参数的值。

值传递是将参数的值复制一份传递给函数,在函数中修改这份复制的值对原始参数没有影响。而地址传递是将参数的地址传递给函数,函数可以通过这个地址来修改原始参数的值。

在你的代码中,假设istExist函数的定义如下:

void istExist(int p, string name) {
    // some code here
}

当你使用值传递调用istExist函数时,传入的参数p和name被复制到函数中的新变量p和name。如果istExist函数对这两个变量进行任何修改,只会影响到这些副本变量,而不会影响到原始变量p和name的值。因此,值传递无法实现你期望的功能。

要解决这个问题,你可以改为使用地址传递调用istExist函数,即传入参数p和name的地址。这样istExist函数就可以通过这些地址来直接修改原始变量p和name的值。

示例代码如下:

void istExist(int* p, string* name) {
    // some code here
}

int main() {
    int p = 10;
    string name = "John";

    istExist(&p, &name);

    // continue your code here
}

在这个示例中,istExist函数的参数类型变为了int和string,即指向int和string的指针。在main函数中,通过使用&符号来获取变量p和name的地址,然后将这些地址传递给istExist函数。istExist函数内部可以通过解引用指针来修改原始变量p和name的值。

请注意,在使用地址传递时,你需要在istExist函数内部使用解引用操作符(*)来获取原始变量的值。例如,如果要在istExist函数中修改p的值,你可以使用*p = newValue;的方式来完成。

总结起来,值传递无法修改原始变量的值,而地址传递可以通过指针来间接修改原始变量的值。因此,在对参数进行修改的情况下,你需要使用地址传递来调用istExist函数。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^