关于指针的值与指针的指向
2009-09-07 16:13
225 查看
1, swap(p1,p2)
int *p1,*p2;
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}
2。 swap (p1,p2)
int *p1,*p2;
{
int *p;
p=p1;
p1=p2;
p2=p;
}
这两个函数1一个改变指向的值,2一个改变地址的值,
现在有点不是很清楚,2中改变了地址的值后,形参指向也改变了,为什么不改变实参的指向,为什么??1中改变了形参的指向,实参的指向就改变了,
能不能更清楚一点,我知道是单向的“值传递”方式,想知道为什么?
问题解析:
在函数内部并不会对p1和p2作任何的操作。。。
首先,编译器总是要为函数的每个参数制作临时副本,假设指针参数p1,p2的副本是 _p1,_p2,编译器使 _p1 = p1,_p2=p2。
然后,函数内部的代码:
第二个函数
{
int *p;
p=p1;
p1=p2;
p2=p;
}
实际上等于执行了:
{
int *p;
p=_p1;
_p1=_p2;
_p2=p;
}
因此p1和p2的指向根本没发生过变化。
而第一个函数相当于执行了
{
int p;
p=*_p1;
*_p1=*_p2;
*_p2=p;
}
由于p1和_p1,p2和_p2都是指向通一个内存地址,因此*_p1改变了,*p1也同样改变。
但要注意的是,两个函数当中实参p1和p2都没改变过指向,第一个函数改变的只是p1和p2他们指向的内存空间的值。
看一下以下的程序:
#include <iostream>
using namespace std;
void foo(int x)
{
x=3;
}
int main()
{
int x=5;
foo(x);
cout<<x<<endl;
}
x的值将是5而不会是3。
同样,2的swap函数被调用后,p1和p2的指向(也就是p1和p2的值)也不会改变。
int *p1,*p2;
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}
2。 swap (p1,p2)
int *p1,*p2;
{
int *p;
p=p1;
p1=p2;
p2=p;
}
这两个函数1一个改变指向的值,2一个改变地址的值,
现在有点不是很清楚,2中改变了地址的值后,形参指向也改变了,为什么不改变实参的指向,为什么??1中改变了形参的指向,实参的指向就改变了,
能不能更清楚一点,我知道是单向的“值传递”方式,想知道为什么?
问题解析:
在函数内部并不会对p1和p2作任何的操作。。。
首先,编译器总是要为函数的每个参数制作临时副本,假设指针参数p1,p2的副本是 _p1,_p2,编译器使 _p1 = p1,_p2=p2。
然后,函数内部的代码:
第二个函数
{
int *p;
p=p1;
p1=p2;
p2=p;
}
实际上等于执行了:
{
int *p;
p=_p1;
_p1=_p2;
_p2=p;
}
因此p1和p2的指向根本没发生过变化。
而第一个函数相当于执行了
{
int p;
p=*_p1;
*_p1=*_p2;
*_p2=p;
}
由于p1和_p1,p2和_p2都是指向通一个内存地址,因此*_p1改变了,*p1也同样改变。
但要注意的是,两个函数当中实参p1和p2都没改变过指向,第一个函数改变的只是p1和p2他们指向的内存空间的值。
看一下以下的程序:
#include <iostream>
using namespace std;
void foo(int x)
{
x=3;
}
int main()
{
int x=5;
foo(x);
cout<<x<<endl;
}
x的值将是5而不会是3。
同样,2的swap函数被调用后,p1和p2的指向(也就是p1和p2的值)也不会改变。
相关文章推荐
- C++关于基类指针指向子类对象的问题
- 关于编译错误--提领指向不完全类型的指针
- 关于指向类成员函数的函数指针
- 关于C++的子类指针指向父类
- 关于函数指针的理解(指向的函数返回值又是另外一个函数指针)
- 关于JS中for循环时,作用域问题和this指针指向的总结
- 关于printf与指针数组与指向字符的指针
- 分享:关于指向指针的指针的问题
- 关于编译错误--提领指向不完全类型的指针
- 《深入详解VC++》第三者 74页关于this指针指向子类的问题
- 关于指针的一些知识,记多维数组指针、指针数组、指针的指针和指向函数的指针
- [转载]关于C++的子类指针指向父类.
- 关于数组指针和指向数组指针的指针及其new
- 关于“不允许指针指向不完整的类类型”问题分析
- 关于this指针指向的知识回顾
- 关于“不允许指针指向不完整的类类型”问题分析
- 011 关于指针只读和指针指向的对象只读
- 关于返回指向临时变量指针的困惑
- 错题:关于指针常量与指向常量的指针
- 关于二维数组和指向指针的指针