#include <cstdio>
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
//void myswap(int a, int b)
//{
// int temp = a;
// a = b;
// b = temp;
//}//值传递,另外开辟一块栈区,将值拷贝到新的栈区里,在新的栈区里进行交换,完成后进行释放,原来的值没有任何变化。
//void myswap(int *a, int *b)
//{
// int temp = *a;
// *a = *b;
// *b = temp;
//
//}//址传递,
void myswap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}//引用传递,
//引用
/*********************************************************
Type &name ; <---> Type * const name;
void f(int &a) <---> void f(int * const a)
{ {
a=5; <---> *a=5;
} }
引用在C++中的内部实现是一个常量指针;
1.C++编译器在编译过程中使用常量指针作为引用的内部实现,
因此引用所占用的空间大小与指针相同。
2.从使用的角度,引用只是一个别名,C++为了实用性而隐藏了
引用的存储空间这一细节。
////////////////////////////////////////////////////////////
!!!指针和引用的使用情况选择
如果必须用到数据的首地址的话就采用指针(*)
如果只用到数据本身的数据的话就用引用(&)
ps:引用不占内存,可以优化程序;
///////////////////////////////////////////////////////////
**********************************************************/
//函数
/**********************************************************
内联函数(inline)
@通过代码的内存膨胀来减少函数跳转的次数,以此来减少时间的花费。
@函数前面加上关键字inline
inline int add(int a,int b)
{
return a+b;
}
使用条件:
函数体积极少,使用频率高。(内存膨胀的代价小于函数跳转的时间花费)
**********************************************************/
//函数的重载
/*********************************************************
构成重载:
@!函数名一致;
@!参数列表不一致,
@!!参数的对应位置的类型不同;
@!!参数的个数不同;
ps:
void a(int a,char b) void a(char a,int b) void a(int a)
{ { {
} } }
-----------------------------
!!!注意:
和函数的返回值没有关系
int a(int a)
char a(int a)
报错!!!
-----------------------------
**********************************************************/
int chongzai(int a)
{
a++;
return a++;
}
double chongzai(double a)
{
return a+1;
}
float myadd(float a, float b)
{
return a + b;
}
int myadd(int a, int b)
{
return a + b;
}
//************************************************
//函数的缺省
/*********************************************************
@!函数在定义形参时给出初始值
!!!
@参数的缺省只能由后往前,依次缺省,不能从前往后缺省
@参数的缺省,在只有定义的情况下可以写在定义上,如果有声明,只要在声明中缺省,不要在定义中写缺省;
@参数的缺省与重载混合使用,注意因为缺省导致的二义性
!!!
*********************************************************/
int op(int a, int b, int c=9)
{
return a + b + c;
}
int op(int a, int b)
{
return a + b;
}
int main()
{
//op(1, 2);二义性,缺省后重载有二义性;
op(1, 2, 3);
//*:解引用,乘号,指针
//&:位与,取地址,引用
//int a = 10;
//int *p = &a;
//*p;
/*int &id = a;
id = 100;*/
//cout << a << endl;
//printf("a=%lf\n", chongzai(2.3));
//printf("a=%d\n", myadd(2,3));
//printf("a=%f\n", myadd((int)2.3,(int)3.3));
//printf("a=%f", myadd(2.3,3.3)); !!!!!!注意类型转换导致的错误
getchar();
}