C++学习札记20140318

数组形参

数组的两个特殊性质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))

数组引用形参

形参可以是数组的引用,此时引用形参绑定到对应的实参上,也就是绑定到数组上
void print( int (&arr)[10] )//&arr两端的括号必不可少  int &arr[10]声明成了引用的数组,这是个数组含
//有10个引用的元素,这是错误的
{
;//处理引用的数组
}

传递多维数组

数组第二维的大小都是数组类型的一部分,不能省略!!
//matrix指向数组的首元素,该数组的元素是由10个整数构成的数组
void print( int (*matrix)[10],   int rowSize)//matrix两端括号必不可少
上述语句将matrix声明成指向含有10个整数的数组指针。
//等价定义
void print( int matrix[][10],   int rowSize)//看起来像二维数组,实际上形参是指向含有10个整数的数组指针

引用返回左值

函数的返回类型决定函数调用是否是左值
调用一个返回引用的函数得到左值,其它返回类型得到右值

返回数组指针

函数可以返回数组的指针或引用,但是定义一个返回数组的指针或者引用的函数比较繁琐,使用类型别名可以简化这个任务
typedef int arry[10]; //arry是一个类型别名,它表示的类型是含有10个整数的数组
using arry = int[10]; //与上一句等价,不过是C++11的标准
arry  *func(int i); //func返回一个指向含有10个整数的数组指针

声明一个返回数组指针的函数

要想在声明func时不使用类型别名,我们必须牢记被定义的名字后面数组的维度
int arr[10]; //arr是一个含有10个整数的数组
int *p1[10]; //p1是一个含有10个int型指针的数组
int (*p2)[10]; //p2是一个指针,它指向含有10个整数的数组
和这些声明一样,如果我们想定义一个返回数组指针的函数,则数组的维度必须跟在函数名字之后,然而,函数的形参列表也跟在函数名字后面,且形参列表应该先于数组的维度。返回数组指针的函数形式如下:
type (*function(parameter_list)) [dimension]
具体的例子,下面这个func函数的声明没有使用类型别名:
int  (*func(int i)) [10];
逐层理解该声明的含义
1 func(int i)表示调用func函数时需要一个int类型的实参
2 (*func(int i))意味着我们可以对函数调用的结果执行解引用操作
3 (*func(int i)) [10]表示解引用func的调用将得到一个大小是10的数组
4  int  (*func(int i)) [10]表示数组中的元素是int类型、
使用尾置返回类型,c++11新标准

main:处理命令行选项

在VS2010中选择项目->属性->配置属性->调试->命令行参数,输入参数即可
#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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值