C++中數組([]),指針(*),指針引用(*&)作為形參的區別


c++中數組的名字是一個地址常量,不可修改;指針是一個地址變量,可以修改。

void fun_ptr(int *test) {//指針為形參
	for (int i = 0; i < 10; i++)
	{
		test[i] = 0;
	}
}

void fun_array(int test[]) {//數組為形參
	for (int i = 0; i < 10; i++)
	{
		test[i] = 0;
	}
}

int var_array[10] = { 0,5,9,8,6,4,7,1,3,2 };
	int* var_ptr = new int[10];
	var_ptr[0] = 0; var_ptr[1] = 5; var_ptr[2] = 9; var_ptr[3] = 8; var_ptr[4] = 6; var_ptr[5] = 4; var_ptr[6] = 7; var_ptr[7] = 1; var_ptr[8] = 3; var_ptr[9] = 2;


//形參數組,實參數組
//值可以改變
fun_array(var_array);


//形參數組,實參指針
//值可以改變
fun_array(var_ptr);


//形參指針,實參指針
//值可以改變
fun_ptr(var_ptr);


//形參指針,實參數組
//值可以改變
fun_ptr(var_array);

  

相同:

  • 均可以對所指向的數據的值進行修改
  • 均可以使用下標索引

 

不同:

  • 數組名為地址常量,不可賦值;指針為地址變量,可賦值(可賦值但是無法改變值,如果要改變值,需要用指針引用為形參)

 

常用的傳參有三種類型,傳值,傳地址,傳引用

傳引用中有指針引用(*&)作為形參的,傳引用使得所傳變量的值可以在函數中被改變且保持,指針引用也一樣。

上面我們提到了指針可以在函數中賦值,但是其值在退出函數中保持不變的問題,指針引用就可以解決這一問題:

void fun_ptr_refer(int*& test) {
	int* temp = new int[10];
	test = temp;
}

fun_ptr_refer(var_ptr);

//結果,var_ptr的值發生改變,其存儲的地址變為了新創建的temp所申請的地址

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM