C/C++函数参数,传值域传址的区别!!!
/*
* File: main.cpp
* Author: Vicky
*
* Created on 2010年5月8日, 下午2:47
*/
#include <iostream>
using namespace std;
class A{
public:
A(){
cout << "执行构造函数创建一个对象" << endl;
}
A(A&){
cout << "执行拷贝函数拷贝一个对象" << endl;
}
~A(){
cout << "执行析构函数删除一个对象" << endl;
}
};
void func(A a){
cout << "调用一个传值函数" << endl;
}
void func2(A &a){
cout << "调用一个传址函数" << endl;
}
A getA(A a){
return a;
}
A getA2(A &a){
return a;
}
/**
* 同getA4
*/
A* getA3(A &a){
return &a;
}
/**
* 同getA3
*/
A* getA4(A *a){
return a;
}
/*
* 按值传递的缺点...当创建一个新的对象之后,如果按值传递
* 将复制构造函数创建对象的副本,副本在使用完成之后,又会执行析构函数删除该副本!
*/
int main(int argc, char** argv) {
A a;
func(a);
func(a);
cout << "-------" << endl;
func2(a);
func2(a);
cout << "-------" << endl;
getA(a); // 将拷贝2个对象和删除2个对象,1个对象是作为参数传递的,另外一个对象是作为值返回的!
cout << "-------" << endl;
getA2(a); // 将拷贝1个对象和删除1个对象,该对象是作为值返回的!
cout << "-------" << endl;
getA3(a); // 将不拷贝a的对象做为参数,也不会拷贝a的对象作为返回值(包括删除)!
getA4(&a);
return (EXIT_SUCCESS);
}
执行构造函数创建一个对象
执行拷贝函数拷贝一个对象
调用一个传值函数
执行析构函数删除一个对象
执行拷贝函数拷贝一个对象
调用一个传值函数
执行析构函数删除一个对象
-------
调用一个传址函数
调用一个传址函数
-------
执行拷贝函数拷贝一个对象
执行拷贝函数拷贝一个对象
执行析构函数删除一个对象
执行析构函数删除一个对象
-------
执行拷贝函数拷贝一个对象
执行析构函数删除一个对象
-------
执行析构函数删除一个对象
运行成功(总计时间: 255毫秒)
相关文档:
access(判断是否具有存取文件的权限)
相关函数 stat,open,chmod,chown,setuid,setgid
表头文件 #include<unistd.h>
定义函数 int access(const char * pathname,int mode);
函数说明 access()会检查是否可以读/写某一已存在的文件。参数mode有几种情况组合,R_OK ......
http://uncrustify.sourceforge.net/
Ident code, aligning on parens, assignments, etc
Align on '=' and variable definitions
Align structure initializers
Align #define stuff
Align backslash-newline stuff
Reformat comments (a little bit)
Fix inter-character spacing
Add or remove parens on return ......
CAPTION: 关于C/C++中内存空间的划分
AUTHOR: aIsland 摘自中国IT实验室
DATE: 2010-05-30
E-MAIL: aIsland@live.cn
QQ: 418662213
P.S.
1.Bolanlan|随心high|aIsland 三个网名均为本人
2.声明aIsland 所收录的所有文章其著作权都属于原创作者
  ......
/*
* File: main.cpp
* Author: Vicky
*
* Created on 2010年5月8日, 下午2:47
*/
#include <iostream>
using namespace std;
void swap(int x, int y) {
cout << "x and y swap before : " << x << "\t" << y << endl;
int i = x;
x = y;
y = i; ......