数组作为形参传递
初学者刚学完数组后,需要将数组作为参数传递时,会直接将数组作为参数传递,实际上
数组作为形参传递时,是以指针传递的。
void print(int* a);
void print(int a[]);
//尽管形式不同,但是上面两个函数是等价的,每个函数的唯一形参都是 int* 类型
使用数组作为形参的函数也必须确保使用数组不会越界。
- 管理指针形参的三种方法:
<1>使用标记指定数组的长度 数组本身包含一个结束标记
void print(const char *p)
{
if (p) //若p不是一个空指针
{
while (*p) //只要指针所指的字符不是空字符
{
cout << *p++;
}
}
}
<2>*使用标准库规范(推荐使用) 传递指向数组首元素和尾元素的指针
void print(const char *begin, const char *end)
{
while (begin != end)
{
cout << *begin++;
}
cout << endl;
}
<3>显式传递一个表示数组大小的形参 专门定义一个表示数组大小的形参
//这种方式,在初学时,踩过数组越界的坑后,一般会使用这种方式写
void print(const char a[], size_t size)
{
for (size_t i = 0; i != size; ++i)
{
cout << a[i];
}
cout << endl;
}
验证程序:
void main()
{
char str[] = "hellowprld";
print(str);
print(begin(str), end(str));
print(str, sizeof(str));
}