c++ 中的指標和引用
阿新 • • 發佈:2018-12-10
首先: 指標是儲存的變數的地址,引用是變數的別名,這個必須記住 單純的給變數取別名沒有任何的意義,作為引數傳遞,能保證引數傳遞過程中不產生任何的副本 引用可以直接操作變數,但指標的話必須通過(*p)間接的操作變數,指標可讀性行比較低 //引用必須要有初始值 //int &a; //常量必須要有初始值 //const int i;
struct Teacher{ int age; char* name; }; void getTeacher(Teacher **p){ Teacher* temp = (Teacher*)malloc(sizeof(Teacher)); temp->age = 20; p = &temp; } void getTeacher(Teacher* &p){ p = (Teacher*)malloc(sizeof(Teacher)); p->age = 20; } //指標儲存的是變數的地址,引用是變數的別名 void main(){ //這個t是一級指標 Teacher* t; //這種呼叫的是第一個 getTeacher(&t); //這種呼叫的是第二個 getTeacher(t); system("pause"); }
指標常量與常量指標
void main(){
//指標常量,不可以改變指標的地址,但可以改變地址的變數值
int a = 1;
int b = 2;
int* const p1 = &a;
//p1 = &b;//編譯不通過,不能夠改變p1的地址值,比較專一
*p1 = 3;
//常量指標,可以改變指標的地址,但不可以改變指標的變數值
const int* p2 = &a;
//*p2 = 4;//NO 編譯不通過
p2 = &b;
system("pause");
}
可變引數
void fun(int i,...){ //可變引數指標 va_list args_p; //開始讀取可變引數,i是最後一個固定引數 va_start(args_p,i); int a = va_arg(args_p,int); int b = va_arg(args_p, int); int c = va_arg(args_p, int); printf("%d,%d,%d\n",a,b,c); //結束 va_end(args_p); } void main(){ fun(1,2,3,4); system("pause"); }