#include <cstddef>usingstd::size_t;
#include <iostream>usingstd::cout; usingstd::endl;
// code to illustrate declarations of array-related typesint arr[10]; // arr is an array of ten intsint *p1[10]; // p1 is an array of ten pointersint (*p2)[10] = &arr; // p2 points to an array of ten intstypedefint arrT[10]; // arrT is a synonym for the type array of ten ints// two ways to declare function returning pointer to array of ten ints
arrT* func(int i); // use a type aliasint (*func(int i))[10]; // direct declaration// two arraysint odd[] = {1,3,5,7,9};
int even[] = {0,2,4,6,8};
// function that returns a pointer to an int in one of these arraysint *elemPtr(int i)
{
// returns a pointer to the first element in one of these arraysreturn (i % 2) ? odd : even;
}
// returns a pointer to an array of five int elements//返回一个指针,该指针指向5个int元素构成的数组int(*arrPtr(int i))[5]
{
return (i % 2) ? &odd : &even; // returns a pointer to the array
}
// returns a reference to an array of five int elements//返回一个由5个int元素构成的数组的引用int (&arrRef(int i))[5]
{
return (i % 2) ? odd : even;
}
int main()
{
int *p = elemPtr(6); // p points to an intint (*arrP)[5] = arrPtr(5); // arrP points to an array of five intsint (&arrR)[5] = arrRef(4); // arrR refers to an array of five intsfor (size_t i = 0; i < 5; ++i)
// p points to an element in an array, which we subscriptcout << p[i] << endl;
for (size_t i = 0; i < 5; ++i)
// arrP points to an array, // we must dereference the pointer to get the array itselfcout << (*arrP)[i] << endl;
for (size_t i = 0; i < 5; ++i)
// arrR refers to an array, which we can subscriptcout << arrR[i] << endl;
return0;
}