首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新手-老谭教材一句话不解,求解释!该如何解决

2013-01-26 
新手-老谭教材一句话不解,求解释!我是个初二的学生,自学老谭的教程。 今天看到多维数组与指针这里有几句话

新手-老谭教材一句话不解,求解释!
   我是个初二的学生,自学老谭的教程。 今天看到多维数组与指针这里有几句话不能理解:

   有一个2维数组: int a[3][4]

   书中说 a代表二维数组首元素的地址,a[0],a[1],a[2]又分别代表第 0,1,2 行首元素的地址(因为他们看作为2维数组里面的一维数组)。

   这些我都看懂了,我不懂的是下面的:
   
           书中居然说:a+1和*(a+1)等价。 我就想不通了,a+1 是地址,而*(a+1) 是内容(值)吧?它们怎么会等价呢?

我百思不得其解。希望哪位高手能帮我解释下,谢谢了先!
[解决办法]
参考测试代码:


#include <iostream>

using namespace std;

int main() {
int array[2][4];
cout<<typeid(array).name()<<endl;
cout<<typeid(array+1).name()<<endl;
cout<<typeid(*(array+1)).name()<<endl;

return 0;
}


输出是:
A2_A4_i
PA4_i
A4_i

应用C++的类型系统,可以看出,array+1 返回的类型是一个指针,指向元素类型为整数,个数为4的数组。而C/C++中,对指针使用[]操作符以及对数组类型使用[]操作符是没有区别的。

这主要还是为了和大部分字符串操作、数组操作兼容而导致的。例如:

char *str = "abcd";
在这里str是一个指针,很多C用户喜欢直接根据指针获取第i个元素的引用:str[i],这种写法很“自然”,所以被编译器接受了。

另外:
char str[] = "abcd";
这种情况才是正统、严格的,str现在的类型是严格的字符数组类型(A5_c),那么,数组的[]操作就是被严格定义的:取出数组第i个元素引用的操作。

总结:
array+1返回的是指针类型:PA4_i,指向A4_i(4个整型元素)的数组。而*(array+1)返回的是数组类型:A4_i。所以根据上面描述,二者等价。

热点排行