C++笔记总结之关于数组的引用和引用的数组

转载 2015年11月19日 10:58:02

一、大概区别

就像指针的数组和数组的指针一样耐人寻味

//array首先向右结合,所以这个相当于 (int&)array[] array是个数组,其中的元素是引用
//应该叫:引用的数组
int &array[]
//array首先和&结合,所以array是引用,引用的对象是数组
//应该叫作数组的引用
int (&array)[10] 

二、引用的数组

首先,可以明确的说明,引用的数组是不能当函数的参数的。再者要说明,这种方式是非法的

原因:从引用的本质说吧

首先,引用必须被初始化,这没得说,而数组并不能被另一个数组初始化或被另一个数组赋值这是其一,并且其中的每一个引用,你没有办法给他一下子初始化。

再次,引用它不支持传统意义的复制,它不占用新的空间

再再次,他没有意义,它可以用指针数组实现,完全可以代替

int i,j;
int *a[5] = {&i, &j};
a[0]; // point to i
a[1]; // point to j

再再再次,不好实现,因为编译器不知道应该分多大的内存给引用的数组。

三、数组的引用

如果不好理解,可以这样理解(从网上看到的)

int n3[3] = {2, 4, 6};
int (&rn3)[3] = n3;     //数组的引用

typedef一下

int n3[3] = {2, 4, 6};
typedef int Int3[3];
Int3& rn3 = n3; 

四、数组的引用的应用

1、如上所说,可以当函数参数,并且可以传递维数过去。

2、维度的大小可以用一个模板的方式直接表示,这样更清楚明确

template<size_t SIZE> void fun(int (&arr)[SIZE] );

code:

  1: // --------------------------------------------------------------------------
  2: // 说明:数组引用学习
  3: // 环境:vs2008
  4: // 创建:熊哥 (http://pppboy.blog.163.com)
  5: // 时间:2013.9.13
  6: // --------------------------------------------------------------------------
  7: 
  8: //固定大小,很难受
  9: void ArrRef(int (&arr)[5])
 10: {	
 11: 	for (int i = 0; i < 5; ++i)
 12: 	{
 13: 		cout << arr[i] << " ";
 14: 	}
 15: 	cout << "\n";
 16: }
 17: 
 18: //使用模板通用化一些,对数组通用
 19: template<size_t SIZE>
 20: void ArrRefTemplete(int (&arr)[SIZE])
 21: {	
 22: 	for (int i = 0; i < SIZE; ++i)
 23: 	{
 24: 		cout << arr[i] << " ";
 25: 	}
 26: 	cout << "\n";
 27: }
 28: 
 29: int main(int argc, char* argv[])
 30: {
 31: 	const int MAX_INDEX(5);
 32: 	int aIndex[MAX_INDEX] = {1,3,4,5,6};
 33: 
 34: 	//如果改了数组大小MAX_INDEX的值,两个大小对不上就会有问题
 35: 	ArrRef(aIndex);
 36: 
 37: 	//如果改了数组大小MAX_INDEX的值,也无所谓
 38: 	ArrRefTemplete(aIndex);
 39: 
 40: 	system("pause");
 41: 	return 0;
 42: }

out:

1 3 4 5 6
1 3 4 5 6
请按任意键继续. . .

end

C++的一般引用及其数组引用

【转】 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的声明方法:类型标识符 &引用名=目标变量名; 【例1】:int a;...
  • thisnameokbu
  • thisnameokbu
  • 2014年06月12日 10:10
  • 364

C++ 数组引用传递与指针传递

#include #include #include using namespace std; class SourceFile { public: template ...
  • le119126
  • le119126
  • 2015年12月23日 17:13
  • 1194

二维数组的引用总结

今天在论坛上有朋友提问:声明函数如下void function(int** pInt),意图是想参数传递一个二维数组。于是就定义了一个二维数组,比如 int[1][1],然后调用函数。结果如何?当然是...
  • xinsuixiaofeiyu
  • xinsuixiaofeiyu
  • 2013年11月28日 16:43
  • 3100

C++的数组元素为什么不能是引用类型

感谢原作者分享:http://blog.xinspace.space/2015/01/25/cpp-array-element-not-ref/ 这几天在看c++基础内容,看到数组的...
  • fukaibo121
  • fukaibo121
  • 2017年07月31日 22:15
  • 555

C&C++关于数组的定义,引用传参问题

C&C++关于数组的定义,引用传参问题 (1)数组的定义         #define maxSize 50         static int length = 10;         ...
  • K_zer0
  • K_zer0
  • 2017年02月07日 14:30
  • 476

C++11 range for 遍历多维数组, 迭代变量添加引用 "&"的问题

问题背景        auto 是 C++ 11 扩展的新特性,用于自动类型推导。不过,如果你希望推导出的类型为引用(&),就要手动在变量名前加 '&';如果你还需要变量是常量的话,也要手动加入 '...
  • Ace_Yom
  • Ace_Yom
  • 2015年10月08日 09:29
  • 1555

C# 引用类型数组

先自定义一个类card,  class card     {          public  int par1;     }      card[] ca = new card[3];...
  • qq_15695787
  • qq_15695787
  • 2017年02月02日 17:17
  • 935

(三)引用类型数组的初始化

之前的博客《深入数组--内存中的数组》中用图解的方式展示了普通数组在内存中是怎么存储的,本篇将以同样的方式说明引用类型数组在内存中是如何存储的。 案例: class Person{ p...
  • m0_37630602
  • m0_37630602
  • 2017年04月13日 09:16
  • 449

引用和指针的区别,数组和指针的区别

一:引用和指针的区别 1:引用并非对象,它只是为一个已存在的对象所起的另外一个名字,必须初始化,而且无法改变它绑定的对象,之后每次使用这个引用都是访问最初绑定的那个对象。 2:指针本身是对象,可以...
  • u013445530
  • u013445530
  • 2015年06月24日 12:08
  • 1014

c++引用数组,数组引用

一、大概区别 就像指针的数组和数组的指针一样耐人寻味 //array首先向右结合,所以这个相当于 (int&)array[] array是个数组,其中的元素是引用 //应该叫:引用的数组 in...
  • cncnlg
  • cncnlg
  • 2014年08月07日 20:23
  • 306
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++笔记总结之关于数组的引用和引用的数组
举报原因:
原因补充:

(最多只允许输入30个字)