P94,5.9练习,1、写出下列声明:...一个到包含10个整数数组的引用一个到字符串数组的指针
1、写出下列声明:...一个到包含10个整数数组的引用一个到字符串数组的指针
char* p[]; 或char**p;
最后,关于到数组的指针,我有点晕,比如:int* p可以说是“到整数的指针”,是不是也可以说是“到整数数组的指针”?
可以这么说。
1、怎么定义到数组的引用?
char cArray[] = {\0};
char *&rpcArray = cArray;
所谓定义其实是这样的:
typedef char * AraayPtr_t[];
实际上这是一个指向指针的指针。
别的问题相对简单,你自己再多想想。
到数组的引用:
int array[10];
typedef int (&ref_t) [10];
ref_t ref=array;
有趣的应用:
确定数组的大小(类型安全版本)
template <class elem_t,size_t elem_nums>
size_t ArraySize(elem_t (&ArrayName)[elem_nums])
{
return elem_nums;
}
int array1[10];
ArraySize(array1)==10;
double array2[100];
ArraySize(array2)==100;
我也刚做的这几题,通过了!我试着说一下:
1、写出下列声明:...一个到包含10个整数数组的引用一个到字符串数组的指针
int (&iref)[10]; //到数组的引用
char (*pca)[]; //到字符串数组的指针
请参考c++pl第72页,4.9.1关于申明的结构一节,注意申明运算符的约束力。
后缀[],()的约束力强于前缀*,&,*const,所以:
int *pca[10]; //包含10个int指针的数组
int (*pca)[10]; //到包含10个int的数组的指针
必须使用(),这是问题的关键。
2.typedef,明白了上面的问题,这个问题就好解决了。
typedef int *pia [7]; //7个到整数的指针的数组
typedef int *(*ppia)[7]; //到7个到整数的指针的数组的指针
//第二个申明也可以利用第一个申明来写,更方便:typedef pia *ppia;
typedef int *aapi [8][7]; //array of 8 arrays of 7 pointers to int
多维数组可以参见c++primer(中文版)p93页。
我也刚学到这,大家多交流,我的完整的代码对以上申明和定义作了检验,需要可以
给我发mail:zpwh@sina.com.
typedef int [7]; //指向数组的指针,数组有7个整向元素
typedef int *(*ppia)[7]; //指向数组的指针,数组有7个int *元素
添了括号就是指向数组的指针,没有就是定义一个数组