C语言函数及指针问题.

发布网友 发布时间: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 函数体

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com