C++第6章:返回类型:返回数组的指针 或 数组的引用

本文深入探讨了C++中数组指针与引用的概念,包括如何声明与使用数组指针,以及数组引用的特性。通过实例展示了不同情况下指针与引用的区别,如返回数组的首地址与整个数组地址的方法,以及如何正确理解和使用这些特性。

返回数组指针
因为数组不能被拷贝,所有函数不能返回数组,但是可以返回数组的指针或引用:
使用类型别名:

   typedef int arrT[10];//arrT是一个类型别名 ,表示含有10个整数的数组using arrT =int[10];
则 arrT *func(int i) //返回一个指向含有10个整数的数组的指针

//如果不使用类型别名 ,则需要牢记数组的维度
int arr[10];//
int *p1[10]//含10个指针的数组
int (*p2)[10] =&arr; //p2指向的是整个数组的地址
int *p3 = arr ; //p3指向的是数组的第一元素的首地址

//p2指向的是整个数组的地址 //p3指向的是数组的首地址


//具体:声明一个返回数组指针的函数
int (*func(int i))[10];
可以按照以下的顺序来逐层理解该声明的含义:
func(int i)表示调用func函数时需要一个int类型的实参。
(*func(int i))意味着对我们可以对函数调用的结果执行解引用操作。
(*func(int i))[10]表示解引用func的调用将得到一个大小是10的数组。
int  (*func(int i))[10]表示数组中的元素是int类型。

int s[2] = { 0,1 };
int * arrf()
{
	return s;  //返回的数组的首地址  解引用得到的是第一个元素

}
int (*af(int i))[2]
{
	return &s; //返回的是整个数组的地址 意思是解引用直接得到整个数组
 }
int main()
{
    cout <<  (*af(1))[0] <<   (*af(1))[1] << endl; //解引用后就当于在操作数组,属于 输出是 0  1;
}

以上以及使用尾置和decltype返回一个数组的指针

int(*fun(int i))[10];
auto fun1(int i) -> int(*)[10];

int aod[] ={1,3,5,7,9};
decltype(odd) * arrptr ()  //decltype(odd) 返回的是一个数组,要向表示是指针,所以加上*号
{
   return &odd;
}


返回数组的引用,类似于指针 ,下面举几个例子,
//一般就把*换成引用&

string s1[10] = { "aa","aa", "aa", "aa", "aa", "aa", "aa", "aa", "aa", "aa" };

string(&fun2(int i))[10];
auto fun3(int i)->string(&)[10];

using ArrT = string[10];
ArrT& func5(int i);
decltype(s1)  &fun4(int i);
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值