- 论坛徽章:
- 0
|
最近在看网上到处都有的免费C学习资料《Linux C编程一站式学习》,现在遇到一个习题,网上搜了一下别人作的,和自己的结论不一样,烦请高手指教一下,习题如下:
1、定义一个函数increment,它的作用是把传进来的参数加1。例如:- void increment(int x)
- {
- x = x + 1;
- }
- int main(void)
- {
- int i = 1, j = 2;
- increment(i); /* i now becomes 2 */
- increment(j); /* j now becomes 3 */
- return 0;
- }
复制代码 我们在main函数中调用increment增加变量i和j的值,这样能奏效吗?为什么?
我的回答:increment函数不会增加变量i和j的值,也就是说变量i和j的值不会有任何改变。
在我有限的编程经验中是这样理解这个例子的:声明的函数increment中的参数x是个形参,在将变量i/j传递给函数increment的时候仅仅是将i/j的数值(实参)复制给参数i,increment函数修改的实际上是变量x所存放的内存地址,改变的是x这个变量的值。
我不知道这样理解是否正确,因为我记得VB(还是PHP?)中会有声明实参和形参两种,而这两种的区别就在于传递参数的时候,是传递值,还是传递内存地址,如果只是值传递,那么原始的变量将不受影响,如果是内存地址传递,那么由于原始的变量也指向的是同一个地址,所以也会被改变。 |
|