发布网友 发布时间:6小时前
共5个回答
热心网友 时间:3小时前
这个理解起来其实很简单
只要记住一点,实参和形参不在一个内存地址中就可以,改变形参不会改变实参的
但是有一个例外,就是在声明子函数是,参数带&,这表示实参形参公用一个内存地址
在调用x1函数时,i j会另外申请内存地址,那么交换了ij,但是ab所在的内存地址的内容是不会改变的
调用x2时,传递过去的是ab的内存地址,并且在子函数中,交换了ab内存地址中的内容,那么ab就交换了
这个主意两点
1,交换了ab内存地址(也就是指针)中的内容,但是你看在子函数中,指针是没有交换的,所以说传递过去的参数是没有改变,只是改变了指向的地址中的内容
2,要是在子函数中声明的c是指针,如果用c=i;i=j;j=c,那么只是交换了指针,而指针指向的内容还是没有改变,并且在主函数中,这两个参数指针还是没有改变。道理同第一个,因为实参和形参是占不同的内存地址,
热心网友 时间:3小时前
调用第一个函数的过程为 值传递
热心网友 时间:3小时前
那个,这是常识吧。几乎所有的C语言书籍都会把这个做为标准案例来演示
第一个仅传递副本,就是传值
第二个是传递地址。
热心网友 时间:3小时前
代入变量和值的作用域不一样,也就是,如果通过变量代入,此时不会改变变量的值。如果通过指针(参数)的形式代入,则会可以改变指针指向的变量的值,但是地址不可以改变。如果想改变地址呢,就得用双指针,或者说第二层地址代入。
热心网友 时间:3小时前
X1是实参的值赋值给形参,实参值并没有改变。
X2定义的指针,为了处理大量数据,指针是直接操作实参本身(注意:不是赋值实参的值)。
参考:C.Primer.Plus(第五版)中文版.pdf 函数体