从内存分配来看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
- 从内存分配来看C语言的值传递和指针传递问题
- C语言指针传递和内存分配
- C语言指针传递和内存分配
- C语言指针传递和内存分配
- C语言指针传递和内存分配
- 指针参数的传递和内存分配
- C 函数值传递和指针传递的效率问题
- C++内存分配、函数调用(值传递、指针传递、引用传递)、返回值问题
- C语言指针的指针传递内存的理解
- C语言指针传递与值传递
- c语言和c++中值传递、指针传递和引用传递的比较和区别
- C语言有关内存和动态分配内存传递问题
- C语言 内存管理--指针的函数传递
- C/C++语言参数传递----值传递、引用传递、指针传递、指针引用传递
- C/C++语言参数传递----值传递、引用传递、指针传递、指针引用传递
- C/C++语言参数传递----值传递、引用传递、指针传递、指针引用传递
- C语言函数传递指针参数的问题
- C语言函数传递指针参数的问题
- 程序员划分:看顶级高手如何编程
- 老鸟对菜鸟的一些建议
- 春节快乐
- 程序员永远没有出头之日吗?
- IBM大中华区总架构师 寇卫东:话说程序员的职业生涯
- 从内存分配来看C语言的值传递和指针传递问题
- IT从业者的职业规划
- 程序员:增加编程经验的3种途径
- 开发你的第一个android程序 Hello world
- 增加编程经验的三种途径
- 程序员:开始编程生涯的5个建议
- 浅谈程序员的数学修养
- 网摘--做人、做事,做架构师——架构师能力模型解析
- 程序员101:如何自学编程