话说昨天我读C++ Primer的时候,遇到句话不理解,void putValues( int (&arr)[10] );,然我疑惑了好一会,
然后就跑CSDN上去提问(貌似高手回贴速度很快的), 虽然很多热心的大虾帮我解释,我还是迷迷糊糊的,
今天结贴给分的时候都还郁闷着呢。
直到我实在受不了了,翻开老谭的书看看,有int *p[10],这样的写法,我才豁然开朗啊,
这么基础的东西有都叫我忘了,不过疑问搞不清楚的滋味真不爽啊,所以特地就这方面的细节写出来,
希望以后有相同疑问的兄弟们看到我的文章能有所帮助。
int a[10]; //这个我想是写程序得都知道,一个int型数组,我的目的是由这里方便理解后面的
int* a[10]; //咋看上去可能比较迷糊,但是参考上面的,由于“[ ]”优先级高,所以等同于int* T(a[10]);就是说也是包含10个元素的数组,不过元素类型从int变成了int*;(指针数组)
int& a[10]; //error 不要以为同上,不支持引用数组
//以下写法可能主要用在传函数参数上面,一般不会直接这么定义
int (*p)[10]; //到数组的指针,不过和一般的int a[10]; int* p = a;不一样,这种写法就是说int a[10]; int* p = &a;所以也可以把p当作一个二维数组的指针来理解,就是一个N行10列的数组,等价于int p[ ][10];
int (&r)[10]; // 到数组的引用,这样写以后实际上就是对数组名字&r=a; 但是应为引用必须初始化,所以要这样写int a[10]; int (&r)[4] = a; 然后r[n]就等于a[n]拉,