数组形参
数组的两个特殊性质1不允许拷贝数组,2使用数组时会将其转换成指针
我们可以把形参写成类似数组的形式
//尽管形式不同,但是这三个函数是等价的,,形参完全一样 const int *
void print(const int *)
void print(const int [])//函数的意图是作用一个数组
void print(const int [10])//这里的维度表示我们期望数组含有多少个元素,实际不一定
管理数组的方法
1 处理C风格字符串,遇空字符时停止
void print(const char *cp)
{
if(cp)//若cp不是一个空指针
{
while(*cp)//只要cp指针所指的字符不是空字符
{
cout << *cp++ << ' ';
}
}
}
2 使用标准库
void print(const int *beg, const int *end)
{
while(beg != end)
{
cout << *beg++;
}
}
调用这个函数我们要传入两个指针,一个指向首元素,一个指向尾元素
int j[] = {0, 1};
print(begin(j), end(j));//begin和end函数返回两个指着,分别指向首元素和尾元素的下一个位置
3 显式传递一个表示数组大小的形参
//const int ia[] 等价于 const int *ia
//size表示处理数组的大小,将它显式的传给函数节控制对ia元素的访问
void print(const int ia[], size_t size)
{
for(size_t i=0; i != size; ++i)
{
cout << ia[i];
}
}
print(j, end(j)-begin(j))
数组引用形参
传递多维数组
引用返回左值
返回数组指针
声明一个返回数组指针的函数
main:处理命令行选项
#include <iostream>
#include <string>
int main(int argc, char *argv[])
{
if (argc > 2) {
std::string str = argv[1];
str += argv[2];
std::cout << str << std::endl;
} else {
std::cout << "error" << std::endl;
}
return 0;
}
#include <iostream>
#include <string>
int main(int argc, char *argv[])
{
for (int i=0; i<argc; i++) {
std::cout << i+1 << "," << argv[i] << std::endl;
}
return 0;
}