1. 程式人生 > >C語言到C++ 基礎2

C語言到C++ 基礎2

指標的引用

 

#include <iostream>

using namespace std;

struct Teacher
{
	char name[64];
	int age;
};

//二級指標的用法
int getTeachar(Teacher **p)
{
	Teacher *tmp = NULL;
	if (p == NULL)		
		return -1;
	tmp = (Teacher *)malloc(sizeof(Teacher));
	if (tmp == NULL)	
		return -2;

	tmp->age = 33;
	*p = tmp;
	return 0;
}
//關於指標的引用
int getTeachar2(Teacher * &p)
{

	p = (Teacher *)malloc(sizeof(Teacher));
	if (p == NULL)
		return -1;
	p->age = 22;
	return 0;
}

int main01()
{
	Teacher *pT1 = NULL;
	getTeachar(&pT1);	//二級指標的用法
	cout << "二級指標修改age:" << pT1->age << endl;
	free(pT1);	//釋放

	getTeachar2(pT1);	//指標的引用
	cout << "指標的引用修改age:" << pT1->age << endl;
	free(pT1);	//釋放

	cout << "hello..." << endl;
	system("pause");

	return 0;
}

常量的引用

#include <iostream>

using namespace std;

int main02()
{
	//普通引用 
	int a = 10;
	int &b = a;
	b = 20;
	cout << "a:" << a << "   " << "b:" << b << endl;

	//常引用	
	int x = 31;
	const int &y = 31;	//常引用 變數只有只讀屬性
	cout << "x= " << x << "   " << "y = " << y << endl;
	//用法1  用變數初始化常引用
	//用法2  用常量初始化常引用 引用是沒有記憶體的
	//int &x1 = 35; 錯誤
	const int &z = 63;

	
	system("pause");
	return 0;
}

 

行內函數

#include <iostream>

using namespace std;

//宣告定義必須要在一起 編譯器不一定允許內聯請求
//巨集程式碼片段 由前處理器處理
inline int add(int a,int b)
{
	return a + b;
}

int main03()
{
	cout << "使用行內函數" << add(12, 15) << endl;
	system("pause");
	return 0;
}

函式預設引數

#include <iostream>

using namespace std;

void myprint(int x = 3) //預設引數
{
	cout << "x:" << x << endl;
}

//預設引數必須在形參列表的最右邊
void myprint1(int  n,int m,int x,int y = 3) //預設引數
{
	cout << "y:" << y << endl;
}


int main04()
{
	myprint(); //預設引數

	system("pause");
	return 0;
}

函式佔位引數

#include <iostream>

using namespace std;

//函式佔位引數 函式呼叫時,必須寫夠引數
void printfA(int x, int y, int)
{
	cout << "x:" << x << "   y:" << y << endl;

}

//可以將佔位引數和預設引數結合起來用
//為以後程式擴充套件留下線索,相容C語言中不規範的寫法
void printfB(int x, int y, int = 0)
{
	cout << "x:" << x << "   y:" << y << endl;

}

int main05()
{
	printfA(4,5,6);	//呼叫時必須寫夠引數 
	printfB(8,9);
	printfB(11,22,33);
	system("pause");
	return 0;
}

 

函式過載

#include <iostream>
#include <string>

using namespace std;

//當函式名和不同的引數搭配時函式的含義不同
//判斷標誌   1名稱  2引數  3返回值
//名稱相同 引數不同  返回值不作為過載的依據
void myPrint(int a)
{
	cout << "a:" << a << endl;
}

void myPrint(char a)
{
	cout << "a: " << a << endl;
}

void myPrint(string a)
{
	cout << "a:" << a << endl;
}


void myPrint(int a,int b)
{
	cout << "a:" << a << "  b:" << b << endl;
}


int main06()
{
	myPrint(100);
	myPrint("52,85");
	myPrint('b');
	myPrint("梵高先生");


	system("pause");
	return 0;
}

 

函式過載和函式指標

 

#include <iostream>
#include <string>

using namespace std;

void myPrintA(int a)
{
	cout << "a:" << a << endl;
}

void myPrintA(char a)
{
	cout << "a: " << a << endl;
}

void myPrintA(string a)
{
	cout << "a:" << a << endl;
}


void myPrintA(int a, int b)
{
	cout << "a:" << a << "  b:" << b << endl;
}

//函式指標
//宣告一個函式型別
typedef void (myPrintATypeA)(int a);  //定義一個函式指標型別
//myPrintATypeA *p = NULL;	//定義一個函式指標 指向函式的入口地址

//宣告一個函式指標型別
typedef void (*myPrintATypeB)(int a);  //定義一個函式指標型別
//myPrintATypeB p = NULL;	//定義一個函式指標型別 定義了一個指標	

//定義一個函式指標變數
void  (*myPrintATypeC)(int a);

int main()
{
	myPrintATypeA *p = NULL;
	p = myPrintA;
	p(10);
	//p(10, 12);   //err  編譯器會進行嚴格的函式檢測
	system("pause");
	return 0;
}