1.引用深入学习
指针的引用
同一般变量一样指针也可以用作引用。可以实现在C语言中的双重指针的效果。可以不必对指针取地址而达到改变指针的目的。
使用实例:
#include "iostream"
using namespace std;
//指针的引用
struct Teacher
{
char name[32];
int age;
};
//
int getTeacher(Teacher *&p)
{
//从堆中申请内存
p = (Teacher*)malloc(sizeof(Teacher));
if (p ==NULL)
{
return -1;
}
p->age = 33;
}
void FreeTeacher(Teacher *p)
{
free(p);
}
void main()
{
Teacher *PT1 = NULL;
getTeacher(PT1);
cout << PT1->age << endl;
FreeTeacher(PT1);
system("pause");
}
void main()
{
const int a = 10;//C++编译器将其放在符号表中
//int &n = 41;//引用必须有内存
const int &n = 41;//引用必须有内存,C++编译器会给41自动分配内存空间
}
其实没什么软用,谁没事写的这么花里胡哨。
2.内联函数
内联函数不能做声名!!!
inline void printA()
{
int a = 10;
cout << a << endl;
}
//与宏替换类似
//内联函数与宏代码有点类似
//内联函数由编译器处理
//内联函数请求失败会当做普通函数处理
//感觉内联函数只有减小开销的作用
void main()
{
printA();
system("pause");
}
3. 函数参数相关拓展
默认参数与占位参数
在C++中函数的形参是可以赋默认值的
如果有参数按所写参数来,如果没有可以按照默认参数
void myprint(int x = 3)
{
cout << x << endl;
}
void main()
{
myprint(4);
myprint();
system("pause");
}
//函数的占位参数
void func(int a, int b, int)
{
cout << "a=" <<a << endl << "b=" << b << endl;
}
//函数占位参数虽然没有,但要补全
void main()
{
func(1, 2, 3);
system("pause");
}
感觉还是没什么软用
据说是为了以后做扩展用的
我觉得可能是为了,以后把底层函数改变,增加入口参数时,避免所有都重写的麻烦
其实还是没啥软用,咋地你都得全改一遍不是
4.函数重载
函数名相同,但是再参数不同,类型不同,执行不同语句的功能
感觉这还有点用的,之前学MATLAB的时候很多函数都是如此
返回值不是函数重载的判断标准
编译器会帮你自动完成匹配
void myprint(int a)
{
cout << a << endl;
}
void myprint(int a, int b)
{
cout << a << endl << b << endl;
}
void main()
{
myprint(1);
myprint(1, 2);
system("pause");
}
函数重载结合函数指针
void func(int a)
{
cout << a << endl;
}
void func(char*p)
{
cout << *p << endl;
}
void func(int a, int b)
{
cout << a << endl;
cout << b << endl;
}
//申明函数类型
//typedef void (myType)(int a, int b);
申明函数指针类型
typedef void (*myType)(int a, int b);
//通过函数指针指向函数入口
void main()
{
myType fp;//函数指针
fp = func;//把函数指针指向函数入口
fp(1, 2);
system("pause");
}