/*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;
}