C 按引用和指针传递

C 按引用和指针传递,c,pointers,pass-by-reference,C,Pointers,Pass By Reference,通过引用传递函数中的参数和通过指针变量作为函数中的参数传递有什么区别?C中没有通过引用传递,它总是通过值传递 C开发人员可以通过将指针传递到变量并在函数中使用解引用来访问它,从而模拟按引用传递。如下所示,将变量设置为42: static void changeTo42 (int *pXyzzy) { *pXyzzy = 42; } : int x = 0; changeTo42 (&x); < >与C++的“真正的按需传递”进行对比,在这里你不必用指针(尤其是指针指向指针,甚至

通过引用传递函数中的参数和通过指针变量作为函数中的参数传递有什么区别?

C中没有通过引用传递,它总是通过值传递

C开发人员可以通过将指针传递到变量并在函数中使用解引用来访问它,从而模拟按引用传递。如下所示,将变量设置为
42

static void changeTo42 (int *pXyzzy) {
    *pXyzzy = 42;
}
:
int x = 0;
changeTo42 (&x);
< >与C++的“真正的按需传递”进行对比,在这里你不必用指针(尤其是指针指向指针,甚至是经验丰富的代码者偶尔会诅咒和咬牙):
<>我恳求ISO考虑添加真正的引用到下一个C标准。不一定是C++中的全部能力,只是解决了人们调用函数时所遇到的问题。

< P>你可能会想到C++。我将在下面介绍

在C中,没有通过引用传递。为了完成同样的功能,您可以发送一个指向变量的指针作为参数,并在方法中取消引用该指针,如paxdiablo的注释所示

在C++中,如果你试图通过引用C样式(如前面所解释的)或者如果你试图传递参数:

,那么你可以完成同样的事情。
static void multiply(int& x){
    x * 7;
}

void main(){
    int x = 4;
    multiply(x);
}

这个程序末尾的变量x等于28。

引用只是指针。因此,通过引用传递等同于通过指针传递。这至少值得一读,尽管它与“这是一个重复”的主要问题有着边界关系。如果p是int类型的变量,那么&p和*p之间的区别是什么?如果
p
int
,那么,
*p
无效,
&p
是存储
p
的地址。这不是重复的问题!!!大卫·菲克斯。仔细阅读这个问题,因为C没有任何“通过引用”,如果原始帖子澄清它的术语,它可能是有用的,尽管它很可能来自C++,它是一种不同于C的语言。传递数组的行为就像通过引用一样(重要的是,例如如果将C数组参数转换成C++ STD::数组参数)。Hyde,我不想打开一个蠕虫,因为你从来没有真正通过数组。你传递一个指向第一个元素的指针,因此它仍然使用“仿真”。<代码>静态空隙乘法(int和x)< /> >这个符号在普通C中无效,它只在C++中有效,不是吗?在C++中,这个通过引用的不同是如何通过指针的?或者,它是一样的吗?@是的,这只是在C++中有效。在C中这样做的方法已经被另一张海报所覆盖,所以我给出了C++版本,假设OP可能是通过C++引用的,因为C没有这样的特性。@ Ra剃我不相信它有任何不同。我想,你可能会遇到的问题是通过和x而不是*x,C++中的x不能为空。您的代码不能将作为&x传递的参数视为可能具有空值的指针。谢谢。。这很有帮助
static void multiply(int& x){
    x * 7;
}

void main(){
    int x = 4;
    multiply(x);
}