1.形参:定义函数时候,函数名括号中变量名,不调用时候并不占有内存中存储单元,叫虚拟参数;实参与形参转变属于
值传递过程(只能由实参传递给形参们,不能从形参传递给实参),实参与形参互相独立
实参:主函数调用子函数中,函数名后面括号中参数
2.C++提供一种内嵌函数(子函数内嵌主函数中) 用inline修饰,不能用switch语句
3. 函数重载:由于有不同数据类型进行处理,重载为不同数据类型挑选出合适函数;同一个函数名定义多个函数,函数形参实参数据类型不同
因此为了避免程序发生臃肿,采用Template形式。类似于Java 中 AnyType类型
java 中参数传递:值传递和引用传递: 形参的值都是通过对实参值进行拷贝过来的,在引用传递过程都是对实参地址进行拷贝在传递给形参。
特别是在引用传递过程中:引用数据类型 数组,类,接口;基本数据类型是值传递,引用数据类型是引用传递(地址传递)
String 字符串数据具有final特性。
你自己有一把钥匙,别人拿着你这把钥匙进行复制新钥匙 ,拿着新钥匙进入家里进行折腾,所有一般引用传递过程中发现在 子函数中值修改主函数变化--非string类型变量。
- 但是java中String 值在被创建之后不能被修改的;对String对象str做任何修改时候等同于 重建一个新的对象 新的地址指向形参中值,与实参Str不在同一个地址。
- 主函数中str地址中值没有发生变化,输出还是AAA;
C++中值传递:值传递,引用传递f(&a ,&b)和指针传递f(*a,*b):参考,指针性函数:指针指向该形参函数的地址
1 // test.cpp : Defines the entry point for the console application. 2 // 3 4 #include "stdafx.h" 5 #include <iostream> 6 7 using namespace std; 8 9 //值传递 10 void swap1(int p,int q) 11 { 12 int temp; 13 temp=p; 14 p=q; 15 q=temp; 16 } 17 18 //指针传递,函数体内只有指针值的变化 19 void swap2(int *p,int *q) 20 { 21 int temp; 22 temp=*p; 23 *p=*q; 24 *q=temp; 25 } 26 27 //指针传递,函数体内只有指针的变化 28 void swap3(int *p,int *q) 29 { 30 int *temp; 31 temp=p; 32 p=q; 33 q=temp; 34 } 35 36 //引用传递 37 void swap4(int &p,int &q) 38 { 39 int temp; 40 temp=p; 41 p=q; 42 q=temp; 43 } 44 45 int main() 46 { 47 int a=1,b=2; 48 swap1(a,b); 49 //swap2(&a,&b); 50 //swap3(&a,&b); 51 //swap4(a,b); 52 cout<<a<<" "<<b<<endl; 53 return 0; 54 }
- 值传递:
- 指针传递:swap2函数指针中的发生了交换,swap3指针修改,地址值没有发生变化;传
- 注意swap2函数完成了值得交互,在swap3函数并没有进行值得修改:因为在形参中修改的是 p指针指向b地址 q指针指向a地址,修改p和q指针指向位置,没有修改a地址中的值,,但是在主函数中a指针指向a地址,b指针指向b地址,swap2中是p指向的地址中的值(就是a)与q指向的地址中的值(b)交换,所以swap2执行完后a和b的值是交换了的P指向a地址。
引用传递:C++中引用传递,对形参操作等于实参操作,传递就是地址,不是副本