在c++中使用指向数组的引用
来源:互联网 发布:淘宝有哪些女装潮店 编辑:程序博客网 时间:2024/06/11 03:43
原文地址:http://www.cnblogs.com/yonken/archive/2011/05/04/Using_Reference_To_Fixed_Size_Array.html
今天在工作中需要在一个把一个class内部的某个数组成员expose(是的,有时候不这样做只是徒增麻烦)给外面使用,于是自然而然就想应该是返回一个指向这个数组的引用会好些。指向数组的引用这种用法虽然不是很多见,但我还是写过不少次了,为了方便我常常会用typedef数组类型来实现,不过今天我突然想到一个问题,typedef 只是为了缩短敲的代码长度和阅读方便(当然有时候反而造成麻烦,但这不是重点),也就是说必然会有不需要 typedef 的写法,那么如果要写一个函数让它返回一个指向数组的引用呢?究竟怎么写呢?这个问题我还真搞不定,还好google帮了我。
1. 声明一个指向数组的引用
刚开始接触这个问题的时候确实是有点懵,不过看了C++ Primer后发现这个其实很简单:
int
n3[3] = {2, 4, 6};
int
(&rn3)[3] = n3;
// A reference to an array of 3 ints
没错,确实是有那么点怪异!
那么,typedef 一下也许就好理解多了:
int
n3[3] = {2, 4, 6};
typedef
int
Int3[3];
Int3& rn3 = n3;
// A reference to an array of 3 ints
2. 定义一个接受数组的引用作为其参数的函数
先看看指针是怎么写的:
void
GetInt3_Example1(
int
* pn3)
{
pn3[2] = 1;
// access the third element
}
不过,谁能保证 pn3 的大小就一定是3个int呢?再试试看:
void
GetInt3_Example2(
int
n3[3])
{
n3[2] = 1;
// access the third element
}
当然这样只不过是让它看起来正确罢了, 实际上这种写法和第一种没啥区别!试试看:
int
loc[2];
// local array of 2 integers
GetInt3_Example2(loc);
// no compile error, but access violation!
果然是不行的有木有!
这里还要注意的是,如果改用typedef,会出现一个需要注意的问题:
void
GetInt3_Example3(Int3 n3)
{
Int3 loc = {0};
int
n3Size =
sizeof
(n3);
// n3Size == 4
int
locSize =
sizeof
(loc);
// locSize == 12, see?
}
所以说,最终还是要用引用才能达到限制大小的目的:
void
GetInt3_Example4(
int
(&n3)[3])
或者还是用 typedef 让它看起来舒服些?
void
GetInt3_Example5(Int3& n3)
3. 返回一个指向数组的引用
好了,终于到重点,先来看看用typedef是怎么写的:
Int3& GetInt3_Example6()
{
static
int
n3[3] = {2, 3, 1};
return
n3;
}
很好,那么如果说不用typedef呢?
好吧,我不得不google之,按照这个博客的解释,原来又是一个怪异的写法:
int
(&GetInt3_Example7()) [3]
{
static
int
n3[3] = {2, 3, 1};
return
n3;
}
真是会让人晕倒啊有木有!
- 在c++中使用指向数组的引用
- 在c++中使用指向数组的引用
- 指向数组的引用
- C语言中二维数组、二维指针、指向指针的数组、指向数组的指针
- 如何在C函数中传递指向二维数组的指针参数
- [C++] 引用和指向指针的引用
- C++:指向数组的智能指针scoped_array组件的使用
- C 指向数组的指针
- C和指针之函数之在数组中找特定元素并返回指向该位置的指针
- C中数组的另类引用
- C中数组的另类引用
- c指向数组的指针数组
- 【C/C++】指向数组的指针
- 9、C语言中二维数组及数组名及指向二维数组的指针变量
- 在汇编中引用C语言中的数组
- C语言中字符数组和指向字符数组的指针的区别
- C语言的指向数组的指针
- C语言技巧--在结构体中使用函数例子(定义一个指向函数的指针)
- tcpdump使用与Wireshark抓包分析
- Server
- Nim游戏
- linux 学习文档(二)
- LeetCode 609: Find Duplicate File in System(python)
- 在c++中使用指向数组的引用
- python中编码unicode和utf-8
- 顺序表
- 自己动手编译最新Android源码及SDK
- 将博客搬至CSDN
- 322. Coin Change
- Python练习题 10-11~10-12喜欢的数字
- 排列序号II
- Eclipse修改编码格式