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