天天看點

ca58a_c++_函數參數傳遞_數組形參

/*ca58a_c++_函數參數傳遞_數組形參
1.數組不能複制
2.數組的名稱是指向數組的第一個元素的指針

三種傳遞數組的寫法,資料不修改,建議都加上const
void printValue_4(int (&x)[10])//寫上(&x)小括号,表示x是引用,它引用的數組;不寫,int & x[10]的x是數組,數組裡面的是引用。

形參的長度會引起誤解
數組實參-數組會悄悄地轉換為指針
通過引用傳遞數組
多元數組的傳遞
傳遞給函數的數組的處理---三種方法
txwtech

void printValues_5(int(x)[10], int rowSize)//錯誤,少些了*
void printValues_5(int(*x)[10], int rowSize)//正确
1>d:\users\txwtech\projects\ca58a\ca58a\ca58a.cpp(56): error C2109: 下标要求數組或指針類型
1>d:\users\txwtech\projects\ca58a\ca58a\ca58a.cpp(82): error C2664: “void printValues_5(int [],int)”: 無法将參數 1 從“int [3][10]”轉換為“int []”
1>d:\users\txwtech\projects\ca58a\ca58a\ca58a.cpp(82): note: 與指向的類型無關;強制轉換要求 reinterpret_cast、C 樣式強制轉換或函數樣式強制轉換

//傳遞兩個指針
void printValues_6(const int *beg, const int *end)//*beg指向數組的第一個元素,*end指向數組的最後一個元素的下一個
*/

#include <iostream>
using namespace std;

//三種傳遞數組的寫法,資料不修改,建議都加上const
void printValues(int *x,std::size_t size)//1,x指針,指向數組的第一個元素,建議使用這種
{
	for (std::size_t i = 0; i != size; ++i)
		cout << x[i] << endl;
}

//void printValues_2(int[] x)//寫法錯誤
void printValues_2(int x[], std::size_t size)//2聲明類型為數組,指向數組的第一個元素
{
	for (std::size_t i = 0; i != size; ++i)
		cout << x[i] << endl;
}

void printValues_3(int x[10], std::size_t size)//3--10沒什麼用,可寫可不寫,c++會把它忽略掉
{
	for (std::size_t i = 0; i != size; ++i)
		cout << x[i] << endl;
}
//傳引用的方式int (&x)[10],這個10必須寫。//此方法用的少
//void printValue_4(int &x[10])
void printValues_4(int (&x)[10])//寫上(&x)小括号,表示x是引用,它引用的數組;不寫,int & x[10]的x是數組,數組裡面的是引用。
{
	for (std::size_t i = 0; i != 10; ++i)
		cout << x[i] << " ";
	cout << endl;
}

//多元數組的傳遞
void printValues_5(int(*x)[10], int rowSize)
//x是一個指針,指向一個有很多行的數組的第一行,每行10個數。一共有rowSize行

{
	for (int i = 0; i != rowSize; ++i)
	{
		for (int j = 0; j != 10; ++j)
		{
			cout << x[i][j] << " "; 
		}
		cout << endl;

			
		
	}
}
//傳遞兩個指針
void printValues_6(const int *beg, const int *end)//*beg指向數組的第一個元素,*end指向數組的最後一個元素的下一個
{
	while (beg != end)
	{
		cout << *beg++ << " ";
	}
	cout << endl;
}
//傳遞C風格數組,x指針,指向字元數組的第一個字元,最有一個字元是NULL,\0;
void printChars(const char *x)
{
	while (*x != NULL)
		cout << *x++;
	cout << endl;
}

int main()
{
	int arr[] = {2,4,6,8,0,1,3,5,7,9};
	
	printValues(arr,10);

	cout << "第二次輸出:"<<endl;
	printValues_2(arr, 10);
	cout << "第三次次輸出:" << endl;
	printValues_3(arr, 10);
	傳引用的方式
	cout << "傳引用的方式:" << endl;
	printValues_4(arr);
	int m[][10]=
	{
		{1,2,3,4,5,6,7,8,9,0},
	    {2,4,6,8,0,1,3,5,7,9},
	    {1,3,5,7,9,0,2,4,6,8}
	};
	cout << "多元數組的傳遞:" << endl;
	printValues_5(m, 3);

	cout << "傳遞兩個指針:" << endl;
	printValues_6(arr,arr+10);

	char s[] = "Hello C++";//c風格數組

	cout << "傳遞C風格數組:" << endl;
	
	printChars(s);
	

	return 0;
}
           

繼續閱讀