1. 程式人生 > >c++ 中的指標和引用

c++ 中的指標和引用

首先: 指標是儲存的變數的地址,引用是變數的別名,這個必須記住 單純的給變數取別名沒有任何的意義,作為引數傳遞,能保證引數傳遞過程中不產生任何的副本 引用可以直接操作變數,但指標的話必須通過(*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");
}