从内存分配来看C语言的值传递和指针传递问题

来源:互联网 发布:数据切片 数据切块 编辑:程序博客网 时间:2024/05/16 01:29

     众所周知,值传递是不会改变传入参数的值,而指针传递恰恰相反,那这究竟为什么呢?那下面就让我们来看看:
     首先我们要了解一点:局部变量的地址不是固定的,我们可以把函数的参数看成是局部变量,函数的参数与局部变量(注:此处局部变量不含静态的,因为静态变量相当于全局变量)的生命周期是一样的,函数开始时存在,结束时释放。
     下面看个例子:
void foo(void)
{
       int x;
       x = 1;
       foo1 (x);
}

void foo1(int a)
{
       a = 2;
}
void foo2(int *p)
{
       *p = 3;
}
     再看一张图片:

     当调用函数foo1时,形参a存放在0x1018这个地址,对a进行操作,不会改变x的值(因为x存放在0x1000,与a是不同地址的)。但当调用foo2(&x),由于p是指向x的地址,对p进行操作也就是对x进行操作,所以指针传递可以改变x的值。

 

     如果对程序在内存中如何分配还有疑问,可以看看这篇博文

     http://blog.csdn.net/lovexiaolong/archive/2010/12/27/6101570.aspx

原创粉丝点击