天天看点

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

继续阅读