C語言到C++ 基礎2
阿新 • • 發佈:2018-11-15
指標的引用
#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;
}