声明
- 引用的数组
int& b[3];
[ ]的优先级高于&,表示b是一个数组,类型是为int [3] ,步长为3。
实际C++不支持,原因如下:
- 引用必须被初始化,而数组并不能被另一个数组初始化或被另一个数组赋值,其中的每一个引用,你没有办法给他一下子初始化。
- 引用它不支持传统意义的复制,它不占用新的空间
- 它没有意义,它可以用指针数组实现,完全可以代替
如下:
#include <stdio.h>
int main(){
int i=5,j=6;
int *a[5] = {&i, &j};
printf("%d\n", sizeof(a[0]));
printf("%x\n", a[0]);
printf("%d\n", *(a[0]));a[0]; // pointer to i
printf("%d\n", *a[1]);a[1]; // pointer to j
return 0;
}
输出:
8
c1caa21c
5
6
- 数组的引用
int (&p)[3];
()的优先级高于[],表示p是一个数组,元素为int * ,个数为3。
typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的。 C typedef
//固定大小,很难受
#include <iostream>
#include <stdlib.h>
#include <stdint.h>
using namespace std;
void ArrRef(int (&arr)[5])
{
for (int i = 0; i < 5; ++i)
{
cout << arr[i] << " ";
}
cout << "\n";
}
//使用模板通用化一些,对数组通用
template<size_t SIZE>
void ArrRefTemplete(int (&arr)[SIZE])
{
for (int i = 0; i < SIZE; ++i)
{
cout << arr[i] << " ";
}
cout << "\n";
}
int main(int argc, char* argv[])
{
const int MAX_INDEX(6);
int aIndex[MAX_INDEX] = {1,3,4,5,6};
//如果改了数组大小MAX_INDEX的值,两个大小对不上就会有问题
// ArrRef(aIndex);
//如果改了数组大小MAX_INDEX的值,也无所谓
ArrRefTemplete(aIndex);
// system("pause");
return 0;
}
PS:
- 它是一种“整型”类型,里面保存的是一个整数,就像int, long那样。这种整数用来记录一个大小(size)。size_t的全称应该是size type,就是说“一种用来记录大小的数据类型”。size_t
- 不能在函数调用的参数中指定模板形参的类型,对函数模板的调用应使用实参推演来进行C++ 模板详解
-
int a = 0;andint a(0);make no difference in the machine generated code. They are the same.int a = 0 and int a(0) differences [duplicate]
参考: